<?php

namespace app\admin\service\sys_manage;

use app\model\SysRole;

class RoleService
{
    /**
     * @Desc 角色列表
     * @Author Gorden
     * @Date 2024/2/20 16:29
     *
     * @param $page
     * @param $limit
     * @param $keyword
     * @return \support\Response
     */
    public static function roleList($page, $limit, $keywords)
    {
        $list = SysRole::select('*')
            ->when($keywords != '', function ($query) use ($keywords) {
                $query->where('role_name', 'like', '%' . $keywords . '%');
            })
            ->orderBy('role_addtimes', 'DESC')
            ->forPage($page, $limit)
            ->get()
            ->toArray();
        $count = SysRole::when($keywords != '', function ($query) use ($keywords) {
            $query->where('role_name', 'like', '%' . $keywords . '%');
        })->count();

        return json_success('', compact('list', 'page', 'limit', 'count'));
    }

    /**
     * @Desc 角色详情
     * @Author Gorden
     * @Date 2024/2/20 16:37
     *
     * @param $id
     * @return \support\Response
     */
    public static function roleInfo($id)
    {
        $role = SysRole::find($id);
        if (!$role) {
            return json_fail('角色不存在');
        }

        $role = $role->toArray();
        return json_success('', $role);
    }

    /**
     * @Desc 添加角色
     * @Author Gorden
     * @Date 2024/2/20 16:02
     *
     * @param $params
     * @return \support\Response
     */
    public static function insertRole($params)
    {
        try {
            $data = [
                'role_status' => $params['role_status'],
                'role_category' => $params['role_category'],
                'role_name' => $params['role_name'],
                'role_remark' => $params['role_remark'] ? format_string($params['role_remark']) : null,
                'role_extend_json' => $params['role_extend_json'] ?? null,
                'role_addtimes' => time()
            ];

            // 入库
            if (!SysRole::insert($data)) {
                throw new \Exception('角色添加失败');
            }
        } catch (\Exception $e) {
            return json_fail('角色添加失败');
        }

        return json_success('角色添加成功');
    }

    /**
     * @Desc 修改角色
     * @Author Gorden
     * @Date 2024/2/20 16:02
     *
     * @param $id
     * @param $params
     * @return \support\Response
     */
    public static function updateRole($id, $params)
    {
        $role = SysRole::find($id);
        if (!$role) {
            return json_fail('角色不存在');
        }

        try {
            $data = [
                'role_status' => $params['role_status'],
                'role_category' => $params['role_category'],
                'role_name' => $params['role_name'],
                'role_remark' => $params['role_remark'] ? format_string($params['role_remark']) : null,
                'role_extend_json' => $params['role_extend_json'],
            ];
            if (!SysRole::where('role_id', $id)->update($data)) {
                throw new \Exception('角色修改失败');
            }
        } catch (\Exception $e) {
            return json_fail('角色修改失败');
        }

        return json_success('角色修改成功');
    }

    /**
     * @Desc 删除角色
     * @Author Gorden
     * @Date 2024/2/20 16:40
     *
     * @param $id
     * @return \support\Response
     */
    public static function delRole($id)
    {
        try {
            if (!SysRole::where('role_id', $id)->delete()) {
                throw new \Exception('角色删除失败');
            }
        } catch (\Exception $e) {
            return json_fail('角色删除失败');
        }
        return json_success('角色删除成功');
    }

    /**
     * @Desc 修改角色状态
     * @Author Gorden
     * @Date 2024/2/20 16:50
     *
     * @param $id
     * @param $roleStatus
     * @return \support\Response
     */
    public static function updateStatus($id, $roleStatus)
    {
        try {
            if (!SysRole::where('role_id', $id)->update(['role_status' => $roleStatus])) {
                throw new \Exception('角色状态修改失败');
            }
        } catch (\Exception $e) {
            return json_fail('角色状态修改失败');
        }

        return json_success('角色状态修改成功');
    }

    /**
     * @Desc 检查角色是否存在
     * @Author Gorden
     * @Date 2024/2/21 13:36
     *
     * @param $roleId
     * @return bool
     */
    public static function checkRoleExist($roleId)
    {
        return SysRole::where('role_id', $roleId)->exists();
    }
}