<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use App\Models\Permission;
use App\Models\Role;
use Illuminate\Support\Facades\DB;

class AddMedicalServicesPermissionSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        // Crear los permisos para servicios médicos si no existen
        $permissions = [
            [
                'name' => 'view-medicalServices',
                'display_name' => 'Ver Servicios Médicos',
                'description' => 'Puede ver servicios médicos'
            ],
            [
                'name' => 'create-medicalServices',
                'display_name' => 'Crear Servicios Médicos',
                'description' => 'Puede crear servicios médicos'
            ],
            [
                'name' => 'view-medical-service',
                'display_name' => 'Ver Servicios Médicos',
                'description' => 'Puede ver servicios médicos'
            ],
            [
                'name' => 'create-medical-service',
                'display_name' => 'Crear Servicios Médicos',
                'description' => 'Puede crear servicios médicos'
            ]
        ];

        $createdPermissions = [];
        foreach ($permissions as $permissionData) {
            $permission = Permission::firstOrCreate([
                'name' => $permissionData['name']
            ], $permissionData);
            $createdPermissions[] = $permission;
        }

        // Obtener los roles admin y root
        $adminRole = Role::where('name', 'admin')->first();
        $rootRole = Role::where('name', 'root')->first();
        $doctorRole = Role::where('name', 'doctor')->first();

        // Asignar los permisos a los roles si existen (evitando duplicados)
        foreach ($createdPermissions as $permission) {
            if ($adminRole) {
                // Verificar si el permiso ya está asignado al rol
                $exists = DB::table('permission_role')
                    ->where('permission_id', $permission->id)
                    ->where('role_id', $adminRole->id)
                    ->exists();
                
                if (!$exists) {
                    $adminRole->attachPermission($permission);
                }
            }
            
            if ($rootRole) {
                // Verificar si el permiso ya está asignado al rol
                $exists = DB::table('permission_role')
                    ->where('permission_id', $permission->id)
                    ->where('role_id', $rootRole->id)
                    ->exists();
                
                if (!$exists) {
                    $rootRole->attachPermission($permission);
                }
            }
            
            if ($doctorRole) {
                // Verificar si el permiso ya está asignado al rol
                $exists = DB::table('permission_role')
                    ->where('permission_id', $permission->id)
                    ->where('role_id', $doctorRole->id)
                    ->exists();
                
                if (!$exists) {
                    $doctorRole->attachPermission($permission);
                }
            }
        }

        $this->command->info('Permisos de servicios médicos creados y asignados a roles admin, root y doctor');
    }
} 