<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;

class PermissionSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        // 重置缓存的角色和权限
        app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions();

        // 定义所有权限
        $permissions = [
            // 文档管理权限
            'document.view' => '查看文档',
            'document.create' => '创建文档',
            'document.update' => '编辑文档',
            'document.delete' => '删除文档',
            'document.download' => '下载文档',

            // 系统设置权限
            'system-setting.view' => '查看系统设置',
            'system-setting.update' => '修改系统设置',

            // 操作日志权限
            'activity-log.view' => '查看操作日志',
            'activity-log.export' => '导出日志',

            // 终端管理权限
            'terminal.view' => '查看终端',
            'terminal.create' => '创建终端',
            'terminal.update' => '编辑终端',
            'terminal.delete' => '删除终端',
            'terminal.sync' => '同步终端配置',

            // SOP模板权限
            'sop-template.view' => '查看SOP模板',
            'sop-template.create' => '创建SOP',
            'sop-template.update' => '编辑SOP',
            'sop-template.delete' => '删除SOP',
            'sop-template.publish' => '发布SOP',
            'sop-template.archive' => '归档SOP',

            // 分组管理权限
            'group.view' => '查看分组',
            'group.create' => '创建分组',
            'group.update' => '编辑分组',
            'group.delete' => '删除分组',

            // 用户管理权限
            'user.view' => '查看用户',
            'user.create' => '创建用户',
            'user.update' => '编辑用户',
            'user.delete' => '删除用户',

            // 角色管理权限
            'role.view' => '查看角色',
            'role.create' => '创建角色',
            'role.update' => '编辑角色',
            'role.delete' => '删除角色',
        ];

        // 创建所有权限
        foreach ($permissions as $name => $description) {
            Permission::create([
                'name' => $name,
                'guard_name' => 'web',
            ]);
        }

        // 创建角色并分配权限
        $this->createSuperAdminRole();
        $this->createAdminRole();
        $this->createUserRole();
    }

    /**
     * 创建超级管理员角色
     */
    private function createSuperAdminRole(): void
    {
        $role = Role::create([
            'name' => 'super-admin',
            'guard_name' => 'web',
        ]);

        // 超级管理员拥有所有权限
        $role->givePermissionTo(Permission::all());
    }

    /**
     * 创建管理员角色
     */
    private function createAdminRole(): void
    {
        $role = Role::create([
            'name' => 'admin',
            'guard_name' => 'web',
        ]);

        // 管理员权限（除了角色管理）
        $permissions = [
            // 文档管理
            'document.view',
            'document.create',
            'document.update',
            'document.delete',
            'document.download',

            // 系统设置
            'system-setting.view',
            'system-setting.update',

            // 操作日志
            'activity-log.view',
            'activity-log.export',

            // 终端管理
            'terminal.view',
            'terminal.create',
            'terminal.update',
            'terminal.delete',
            'terminal.sync',

            // SOP模板
            'sop-template.view',
            'sop-template.create',
            'sop-template.update',
            'sop-template.delete',
            'sop-template.publish',
            'sop-template.archive',

            // 分组管理
            'group.view',
            'group.create',
            'group.update',
            'group.delete',

            // 用户管理
            'user.view',
            'user.create',
            'user.update',
            'user.delete',
        ];

        $role->givePermissionTo($permissions);
    }

    /**
     * 创建普通用户角色
     */
    private function createUserRole(): void
    {
        $role = Role::create([
            'name' => 'user',
            'guard_name' => 'web',
        ]);

        // 普通用户权限（基本查看和操作）
        $permissions = [
            // 文档管理
            'document.view',
            'document.create',
            'document.download',

            // 终端管理（仅查看）
            'terminal.view',

            // SOP模板（仅查看）
            'sop-template.view',

            // 分组管理（仅查看）
            'group.view',
        ];

        $role->givePermissionTo($permissions);
    }
}
