<?php

namespace App\Http\Controllers\Admin;

use App\Http\Models\Agent;
use App\Http\Models\AgentCustomer;
use App\Http\Models\Role;
use App\Http\Models\User;
use App\Http\Requests\Sell\AgentCustomerSaveRequest;
use App\Http\Requests\Sell\AgentSaveRequest;
use App\Http\Requests\Sell\AgentUserSaveRequest;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

/**
 * 代理商 之前提的需求 基本没啥用了
 * Class SellController
 * @package App\Http\Controllers\Admin
 */
class AgentController extends Controller
{
    public function index(Request $request)
    {
        if (!$request->ajax()) {
            return view('admin/agent/index');
        }
        $builder = Agent::query();
        if ($keyword = $request->input('keyword')) {
            $builder->where('contact_name', 'like', '%' . $keyword . '%')
                ->orWhere('mobile', 'like', '%' . $keyword . '%');
        }

        $records = $builder->orderByDesc('id')
            ->paginate($request->input('pageSize') ?? TABLE_PAGE_SIZE);
        $items = $records->items();
        return response()->json([
            'rows' => $items,
            'total' => $records->total()
        ]);
    }

    public function statusToggle(Request $request)
    {
        $ids = $request->input('ids');
        $status = $request->input('status');

        Agent::query()->whereIn('id', $ids)->update(['status' => $status]);
        return response()->json(['message' => '操作成功']);
    }

    public function save(AgentSaveRequest $request, $id)
    {
        if (!$request->ajax()) {
            $data = $id > 0 ? Agent::query()->find($id) : null;
            return view('admin/agent/save', [
                'data' => $data,
                'channels' => Role::getUsers(Role::TYPE_CHANNEL_WORKER),
                'agentUsers' => [],
                'hasChannels' => $data->channel_ids ?? []
            ]);
        }

        $validated = $request->validated();
        if ($id == 0) {
            $validated['status'] = 1;
        }
        Agent::query()->updateOrCreate(['id' => $id], $validated);
        return response()->json(['message' => '操作成功']);
    }

    public function delete(Request $request)
    {
        $ids = $request->input('ids');
        Agent::destroy($ids);
        return response()->json(['message' => '操作成功']);
    }


    public function customer(Request $request)
    {


        if (!$request->ajax()) {

            AgentCustomer::query()->where([
                ['status', '=', 1],
                ['created_at', '<', date('Y-m-d H:i:s', strtotime('-15 day'))]
            ])->whereNull('remark')->update(['status' => 0]);
            return view('admin/agent/customer');
        }

        $builder = AgentCustomer::query()->scopes(['user'])->with('user');
        if ($keyword = $request->input('keyword')) {
            $builder->where('customer_name', 'like', '%' . $keyword . '%')
                ->orWhere('contact_user', 'like', '%' . $keyword . '%')
                ->orWhere('contact_phone', 'like', '%' . $keyword . '%');
        }

        $records = $builder->orderByDesc('id')
            ->paginate($request->input('pageSize') ?? TABLE_PAGE_SIZE);

        $items = $records->items();
        array_walk($items, function ($item) {
            $item->createUsername = $item->user->username ?? '';
        });
        return response()->json([
            'rows' => $items,
            'total' => $records->total()
        ]);
    }

    public function customerSave(AgentCustomerSaveRequest $request, $id)
    {
        if (!$request->ajax()) {
            $data = $id > 0 ? AgentCustomer::query()->find($id) : null;
            return view('admin/agent/customer_save', [
                'data' => $data,
                'users' => User::query()->whereIn('role_id', [
                    Role::TYPE_CHANNEL_BOSS,
                    Role::TYPE_CHANNEL_MANAGER,
                    Role::TYPE_CHANNEL_WORKER,
                    Role::TYPE_AGENT_BOSS,
                    Role::TYPE_AGENT_MANAGER,
                    Role::TYPE_AGENT_WORKER
                ])->select(['id', 'username'])->get(),
            ]);
        }
        $validated = $request->validated();

        if ($id == 0) {
            $user = auth()->user();
            $validated['status'] = 1;
            $validated['user_id'] = $user->id;

            if (in_array($user->role_id, [Role::TYPE_AGENT_BOSS, Role::TYPE_AGENT_MANAGER, Role::TYPE_AGENT_WORKER])) {
                $validated['origin'] = 1;
            } elseif (in_array($user->role_id, [Role::TYPE_CHANNEL_BOSS, Role::TYPE_CHANNEL_MANAGER, Role::TYPE_CHANNEL_WORKER])) {
                $validated['origin'] = 2;
            } else {
                return response()->json(['message' => '当前身份既不是代理商也不是渠道'], 400);
            }
        } else {
            //防止未选择的时候 覆盖掉
            if (empty($validated['user_id'])) {
                unset($validated['user_id']);
            }
        }
        AgentCustomer::query()->updateOrCreate(['id' => $id], $validated);
        return response()->json(['message' => '操作成功']);
    }

    public function agentUsers(Request $request)
    {
        if (!$request->ajax()) {
            return view('admin/agent/user');
        }

        $builder = User::query()->where([['agent_id', '>', 0]]);
        $records = $builder->orderByDesc('id')
            ->paginate($request->input('pageSize') ?? TABLE_PAGE_SIZE);
        $items = $records->items();
        return response()->json([
            'rows' => $items,
            'total' => $records->total()
        ]);
    }

    public function agentUsersSave(AgentUserSaveRequest $request, $id)
    {


        if (!$request->ajax()) {
            $data = $id > 0 ? User::query()->find($id) : null;
            $roles = Role::query()->whereIn('id', [
                Role::TYPE_AGENT_BOSS,
                Role::TYPE_AGENT_MANAGER,
                Role::TYPE_AGENT_WORKER
            ])->get();
            return view('admin/agent/user_save', [
                'user' => $data,
                'roles' => $roles,
                'agents' => Agent::all()
            ]);
        }
        $validated = $request->validated();


        if (!empty($validated['password'])) {
            $validated['password'] = bcrypt($validated['password']);
        } else {
            unset($validated['password']);
        }

        if ($id === 0) {
            $validated['status'] = 1;
        }
        User::query()->updateOrCreate(['id' => $id], $validated);
        return response()->json(['message' => '操作成功']);
    }
}