<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Departamento extends Model
{
    // Siempre leer de la BD principal (siser)
    protected $connection = 'pgsql';

    protected $table = 'departamentos';
    protected $fillable = [
        'codigo',
        'nombre',
        'descripcion',
        'gerencia_id',
        'activo',
    ];

    public function gerencia()
    {
        return $this->belongsTo(Gerencia::class, 'gerencia_id');
    }

    public function solicitudes()
    {
        return $this->hasMany(Solicitud::class, 'departamento_id');
    }

    public function usuarios()
    {
        return $this->hasMany(User::class, 'departamento_id');
    }

    /**
     * Acceso rápido a la dirección a través de la gerencia.
     */
    public function getDireccionAttribute()
    {
        return $this->gerencia?->direccion;
    }

    /**
     * Scope: filtra departamentos según el módulo activo en sesión.
     *
     * - Mantenimiento → departamentos de la Gerencia de Mantenimiento (código GMANT)
     * - Tecnología    → departamentos de gerencias bajo la Dirección de Tecnología (código DTIC)
     *
     * Reemplaza los IDs hardcodeados (gerencia_id = 1, gerencia_id = 21) con
     * consultas basadas en códigos para evitar fragilidad ante cambios de IDs.
     */
    public function scopeDelModuloActivo($query, ?string $modulo = null)
    {
        $modulo = $modulo ?? session('modulo_activo', 'tecnologia');

        if ($modulo === 'mantenimiento') {
            // Departamentos de la Gerencia de Mantenimiento (GMANT en seeder, 4400 en producción)
            return $query->whereHas('gerencia', fn($q) => $q->whereIn('codigo', ['GMANT', '4400']));
        }

        // Departamentos de gerencias bajo la Dirección de Tecnología (DTIC)
        return $query->whereHas('gerencia.direccion', fn($q) => $q->where('codigo', 'DTIC'));
    }

    /**
     * Retorna los IDs de gerencias que operan en el módulo activo.
     * Útil para filtrar usuarios/analistas por gerencia del módulo.
     */
    public static function gerenciaIdsDelModuloActivo(?string $modulo = null): array
    {
        $modulo = $modulo ?? session('modulo_activo', 'tecnologia');

        if ($modulo === 'mantenimiento') {
            return Gerencia::whereIn('codigo', ['GMANT', '4400'])->pluck('id')->toArray();
        }

        // Tecnología: todas las gerencias bajo la Dirección DTIC
        return Gerencia::whereHas('direccion', fn($q) => $q->where('codigo', 'DTIC'))
            ->pluck('id')->toArray();
    }
}
