<?php

namespace app\common\service;

use app\common\model\Role;
use app\common\service\Service;
use think\facade\Cache;

class RoleService extends Service
{
    public function list()
    {
        return (new Role)->select();
    }

    public function create($param = [])
    {
        $param = $this->autoParams($param);

        return Role::create($param);
    }

    public function update($param = [])
    {
        $param = $this->autoParams($param);

        return Role::update($param);
    }

    const CODE_CACHE_KEY = 'ROLE_CODE_CACHE';

    public function codes()
    {
        // 从缓存获取之前生成好的值
        // $cache = Cache::get(self::CODE_CACHE_KEY);
        // if ($cache) {
        //     return $cache;
        // }

        $crud = function($parent, $name, $create = true, $read = true, $update = true, $delete = true) {
            $codes = [];
            if ($create) {
                $codes[] = [
                    'id' => "$parent.create",
                    'lable' => "创建-$name"
                ];
            }
            if ($read) {
                $codes[] = [
                    'id' => "$parent.read",
                    'lable' => "读取-$name"
                ];
            }
            if ($update) {
                $codes[] = [
                    'id' => "$parent.update",
                    'lable' => "编辑-$name"
                ];
            }
            if ($delete) {
                $codes[] = [
                    'id' => "$parent.delete",
                    'lable' => "删除-$name"
                ];
            }

            return $codes;
        };

        $codes = [
            [
                'id' => Role::CODE_SUPER_ADMIN,
                'lable' => '超级管理员(所有权限)',
            ],
            [
                'id' => 'admin',
                'lable' => '人员管理',
                'children' => $crud('admin', '人员管理')
            ],
            [
                'id' => 'role',
                'lable' => '角色管理',
                'children' => $crud('role', '角色管理')
            ],
            [
                'id' => 'project',
                'lable' => '项目',
                'children' => [
                    ...$crud('project', '项目'),
                    [
                        'id' => 'project.schedule',
                        'lable' => '进程',
                        'children' => $crud('project.schedule', '进程', read: false)
                    ],
                    [
                        'id' => 'project.status',
                        'lable' => '状态',
                        'children' => $crud('project.status', '状态', read: false, delete: false)
                    ],
                    [
                        'id' => 'project.contract',
                        'lable' => '合同',
                        'children' => $crud('project.contract', '合同')
                    ]
                ]
            ]
        ];
        Cache::set(self::CODE_CACHE_KEY, $codes, 600);
        return $codes;
    }
}