<?php

namespace App\Filament\Resources\RoleResource\Pages;

use App\Filament\Resources\RoleResource;
use Filament\Actions;
use Filament\Resources\Pages\ViewRecord;
use Filament\Infolists;
use Filament\Infolists\Infolist;

class ViewRole extends ViewRecord
{
    protected static string $resource = RoleResource::class;

    protected function getHeaderActions(): array
    {
        return [
            Actions\EditAction::make()
                ->label('编辑')
                ->visible(fn (): bool => $this->record->name !== 'super-admin'),
        ];
    }

    public function infolist(Infolist $infolist): Infolist
    {
        return $infolist
            ->schema([
                Infolists\Components\Section::make('角色信息')
                    ->schema([
                        Infolists\Components\TextEntry::make('name')
                            ->label('角色标识')
                            ->badge()
                            ->color(fn (string $state): string => match ($state) {
                                'super-admin' => 'danger',
                                'admin' => 'warning',
                                'user' => 'success',
                                default => 'gray',
                            }),

                        Infolists\Components\TextEntry::make('guard_name')
                            ->label('守卫')
                            ->badge(),

                        Infolists\Components\TextEntry::make('permissions_count')
                            ->label('权限数量')
                            ->getStateUsing(fn ($record) => $record->permissions()->count())
                            ->badge()
                            ->color('info'),

                        Infolists\Components\TextEntry::make('users_count')
                            ->label('用户数量')
                            ->getStateUsing(fn ($record) => $record->users()->count())
                            ->badge()
                            ->color('success'),

                        Infolists\Components\TextEntry::make('created_at')
                            ->label('创建时间')
                            ->dateTime('Y-m-d H:i:s'),

                        Infolists\Components\TextEntry::make('updated_at')
                            ->label('更新时间')
                            ->dateTime('Y-m-d H:i:s'),
                    ])
                    ->columns(2),

                Infolists\Components\Section::make('权限列表')
                    ->schema([
                        Infolists\Components\TextEntry::make('grouped_permissions')
                            ->label('')
                            ->getStateUsing(function ($record) {
                                // 按模块分组权限
                                $permissions = $record->permissions;
                                
                                if ($permissions->isEmpty()) {
                                    return '该角色暂无权限';
                                }

                                $moduleNames = [
                                    'document' => '📄 文档管理',
                                    'system-setting' => '⚙️ 系统设置',
                                    'activity-log' => '📋 操作日志',
                                    'terminal' => '🖥️ 终端管理',
                                    'guide' => '📖 操作指引',
                                    'group' => '👥 分组管理',
                                    'user' => '👤 用户管理',
                                    'role' => '🛡️ 角色管理',
                                ];

                                $actionNames = [
                                    'viewAny' => '查看列表',
                                    'view' => '查看详情',
                                    'create' => '创建',
                                    'update' => '编辑',
                                    'delete' => '删除',
                                    'download' => '下载',
                                    'export' => '导出',
                                    'sync' => '同步',
                                    'publish' => '发布',
                                    'archive' => '归档',
                                ];

                                $grouped = $permissions->groupBy(function ($permission) {
                                    return explode('.', $permission->name)[0];
                                });

                                $result = [];
                                foreach ($grouped as $module => $perms) {
                                    $moduleName = $moduleNames[$module] ?? $module;
                                    $actions = $perms->map(function ($perm) use ($actionNames) {
                                        $action = explode('.', $perm->name)[1] ?? '';
                                        return $actionNames[$action] ?? $action;
                                    })->join('、');
                                    
                                    $result[] = "<strong>{$moduleName}</strong>：{$actions}";
                                }

                                return implode('<br><br>', $result);
                            })
                            ->html()
                            ->columnSpanFull(),
                    ])
                    ->description(fn ($record) => 
                        $record->name === 'super-admin' 
                            ? 'super-admin 角色拥有系统所有权限' 
                            : '该角色拥有以下权限'
                    )
                    ->collapsible(),
            ]);
    }
}
