<?php

namespace App\Http\Controllers\Admin\System;

use App\Http\Logics\Admin\RoleLogic;
use App\Http\Models\Permission;
use App\Http\Models\Role;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class RoleController extends Controller
{
    protected $logic;

    public function __construct(RoleLogic $logic)
    {
        $this->logic = $logic;
    }

    public function index(Request $request)
    {
        if (!$request->ajax()) {
            return view('admin/system/role/index');
        }
        $roles = Role::query()->orderByDesc('id')->paginate($request->input('pageSize') ?? TABLE_PAGE_SIZE);
        return response()->json([
            'rows' => $roles->items(),
            'total' => $roles->total()
        ]);
    }

    public function save(Request $request, $id)
    {
        if (!$request->ajax()) {
            $record = Role::query()->find($id);
            return view('admin/system/role/save', [
                'data' => $record
            ]);
        }
        Role::query()->updateOrCreate([
            'id' => $id
        ], [
            'name' => $request->input('name')
        ]);
        return response()->json(['message' => '操作成功']);
    }


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

    public function allotPermissions(Request $request)
    {
        $roleIds = $request->input('roleIds');

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

            $selects = [];
            if (count($roleIds) == 1) {
                $role = Role::query()->where(['id' => $roleIds[0]])->first();
                if (!$role) return response()->json(['message' => '参数错误'], 400);
                $selects = $role->permissions->pluck('id')->toArray();
            }

            $permissions = $this->logic->getRoleCanPermissions($role ?? null);

            array_walk($permissions, function (&$item) use ($selects) {
                $item['open'] = true;
                $item['name'] = $item['name'] . ($item['type'] == 1 ? '【菜单】' : '【功能】');
                if (in_array($item['id'], $selects)) {
                    $item['checked'] = true;
                }
            });
            $trees = list_to_tree($permissions, 'id', 'parent_id', 'children');
            return view('admin/system/role/permission', [
                'trees' => $trees,
                'roleIds' => $roleIds
            ]);
        }

        $permissionIds = $request->input('permissionIds');
        $roles = Role::query()->whereIn('id', $roleIds)->get();
        foreach ($roles as $role) {
            $role->permissions()->sync($permissionIds);
        }
        return response()->json(['message' => '操作成功']);
    }
}