<?php

namespace Database\Seeders;

use App\Models\Company;
use App\Models\Permission;
use App\Models\Role;
use App\Models\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;

class UserSeeder extends Seeder
{
    public function run(): void
    {
        // Super Admin (platform-level, no company)
        User::firstOrCreate(
            ['email' => 'superadmin@hrms.local'],
            [
                'name' => 'Super Admin',
                'password' => Hash::make('password'),
                'is_superadmin' => true,
                'user_type' => User::USER_TYPE_SUPERADMIN,
                'allow_login' => true,
                'status' => 'active',
            ]
        );

        // Default company + Company Admin (for testing tenant features)
        $company = Company::firstOrCreate(
            ['email' => 'admin@demo.local'],
            [
                'name' => 'Demo Company',
                'short_name' => 'demo',
                'status' => 'active',
            ]
        );
        if ($company->short_name !== 'demo') {
            $company->forceFill(['short_name' => 'demo'])->save();
        }

        $allPermissionIds = Permission::pluck('id')->all();

        $adminRole = Role::withoutCompanyScope()->firstOrCreate(
            ['name' => 'admin', 'company_id' => $company->id],
            ['display_name' => 'Admin', 'description' => 'Full access']
        );
        $adminRole->permissions()->sync($allPermissionIds);

        $managerRole = Role::withoutCompanyScope()->firstOrCreate(
            ['name' => 'manager', 'company_id' => $company->id],
            ['display_name' => 'Manager', 'description' => 'Team management']
        );
        $managerRole->permissions()->sync($allPermissionIds);

        $employeeRole = Role::withoutCompanyScope()->firstOrCreate(
            ['name' => 'employee', 'company_id' => $company->id],
            ['display_name' => 'Employee', 'description' => 'Basic access']
        );
        $employeeRole->permissions()->sync(
            Permission::whereIn('name', ['dashboard_view', 'view_reports', 'attendances_view', 'leaves_view', 'recruitment_refer', 'recruitment_referrals_view'])->pluck('id')->all()
        );

        User::updateOrCreate(
            ['email' => 'admin@demo.local', 'company_id' => $company->id],
            [
                'name' => 'Company Admin',
                'password' => Hash::make('password'),
                'role_id' => $adminRole->id,
                'is_superadmin' => false,
                'user_type' => User::USER_TYPE_ADMIN,
                'allow_login' => true,
                'status' => 'active',
            ]
        );
    }
}
