<?php

namespace App\Database\Seeds;

use CodeIgniter\Database\Seeder;

class RolesAndPermissionsSeeder extends Seeder
{
    public function run()
    {
        $roleModel = new \App\Models\RoleModel();
        $permissionModel = new \App\Models\PermissionModel();

        // Permissions par défaut pour l'administration
        $permissions = [
            ['name' => 'Voir utilisateurs', 'slug' => 'users.read', 'description' => 'Voir la liste des utilisateurs'],
            ['name' => 'Créer utilisateurs', 'slug' => 'users.create', 'description' => 'Créer un utilisateur'],
            ['name' => 'Modifier utilisateurs', 'slug' => 'users.update', 'description' => 'Modifier un utilisateur'],
            ['name' => 'Supprimer utilisateurs', 'slug' => 'users.delete', 'description' => 'Supprimer un utilisateur'],
            ['name' => 'Voir rôles', 'slug' => 'roles.read', 'description' => 'Voir la liste des rôles'],
            ['name' => 'Créer rôles', 'slug' => 'roles.create', 'description' => 'Créer un rôle'],
            ['name' => 'Modifier rôles', 'slug' => 'roles.update', 'description' => 'Modifier un rôle'],
            ['name' => 'Supprimer rôles', 'slug' => 'roles.delete', 'description' => 'Supprimer un rôle'],
            ['name' => 'Voir dashboard', 'slug' => 'dashboard.read', 'description' => 'Accéder au dashboard'],
            ['name' => 'Voir ventes', 'slug' => 'sales.read', 'description' => 'Accéder au module ventes'],
            ['name' => 'Voir produits', 'slug' => 'products.read', 'description' => 'Accéder au module produits'],
            ['name' => 'Voir catégories', 'slug' => 'categories.read', 'description' => 'Accéder au module catégories'],
        ];

        $permissionIds = [];
        foreach ($permissions as $perm) {
            $existing = $permissionModel->where('slug', $perm['slug'])->first();
            if (! $existing) {
                $permissionIds[$perm['slug']] = $permissionModel->insert($perm);
            } else {
                $permissionIds[$perm['slug']] = $existing['id'];
            }
        }

        // Rôles par défaut
        $roles = [
            [
                'name'        => 'Superadmin',
                'slug'        => 'superadmin',
                'description' => 'Accès complet à l\'application',
                'permissions' => array_values($permissionIds),
            ],
            [
                'name'        => 'Admin',
                'slug'        => 'admin',
                'description' => 'Gestion des utilisateurs et accès aux modules',
                'permissions' => [
                    $permissionIds['users.read'],
                    $permissionIds['users.create'],
                    $permissionIds['users.update'],
                    $permissionIds['users.delete'],
                    $permissionIds['roles.read'],
                    $permissionIds['dashboard.read'],
                    $permissionIds['sales.read'],
                    $permissionIds['products.read'],
                    $permissionIds['categories.read'],
                ],
            ],
            [
                'name'        => 'Utilisateur',
                'slug'        => 'user',
                'description' => 'Accès limité au dashboard',
                'permissions' => [
                    $permissionIds['dashboard.read'],
                ],
            ],
        ];

        foreach ($roles as $roleData) {
            $permissionsForRole = $roleData['permissions'];
            unset($roleData['permissions']);

            $existing = $roleModel->where('slug', $roleData['slug'])->first();
            if (! $existing) {
                $roleId = $roleModel->insert($roleData);
            } else {
                $roleId = $existing['id'];
            }

            $roleModel->assignPermissions($roleId, $permissionsForRole);
        }
    }
}
