<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class CasoPrejuridico extends Model
{
    use HasFactory, SoftDeletes;

    protected $table = 'casos_prejuridicos';

    protected $fillable = [
        'radicado','deudor_id','cliente_corporativo_id','responsable_id',
        'etapa','estado','saldo_capital','intereses','total_deuda','dias_mora',
        'fecha_recepcion','proceso_juridico_id','fecha_judicializacion','observaciones',
        'producto','numero_obligacion','numero_pagare',
    ];

    protected $casts = [
        'saldo_capital' => 'decimal:2',
        'intereses' => 'decimal:2',
        'total_deuda' => 'decimal:2',
        'fecha_recepcion' => 'date',
        'fecha_judicializacion' => 'date',
    ];

    public const ETAPAS = [
        'recepcion' => 'Recepción',
        'registro' => 'Registro',
        'localizacion' => 'Localización',
        'gestion_activa' => 'Gestión activa',
        'acuerdo_en_curso' => 'Acuerdo en curso',
        'seguimiento_acuerdo' => 'Seguimiento acuerdo',
    ];

    public const ESTADOS = [
        'activo' => 'Activo',
        'cerrado_pago' => 'Cerrado por pago',
        'cerrado_acuerdo' => 'Cerrado por acuerdo',
        'judicializado' => 'Judicializado',
        'archivado' => 'Archivado',
    ];

    /**
     * Tipos de producto definidos en Sprint 3 con base en req. Yolima.
     * Reemplaza el campo "Producto" que tenia P2 (CUPO, CONSUMO, etc.).
     */
    public const PRODUCTOS = [
        'HIPOTECARIO' => 'Hipotecario',
        'PRENDARIO' => 'Prendario',
        'GARANTIA_MOBILIARIA' => 'Garantía Mobiliaria',
        'CONSUMO_TC' => 'Consumo (TC)',
        'INSOLVENCIA' => 'Insolvencia',
        'OTRO' => 'Otro',
    ];

    public function deudor()
    {
        return $this->belongsTo(\App\Models\Deudor::class, 'deudor_id');
    }

    public function clienteCorporativo()
    {
        return $this->belongsTo(\App\Models\ClienteCorporativo::class, 'cliente_corporativo_id');
    }

    public function responsable()
    {
        return $this->belongsTo(\App\Models\User::class, 'responsable_id');
    }

    public function procesoJuridico()
    {
        return $this->belongsTo(\App\Models\Proceso::class, 'proceso_juridico_id');
    }

    public function gestiones()
    {
        return $this->hasMany(\App\Models\GestionPrejudicial::class, 'caso_prejuridico_id');
    }

    public function getEtapaLabelAttribute(): string
    {
        return self::ETAPAS[$this->etapa] ?? $this->etapa;
    }

    public function getEstadoLabelAttribute(): string
    {
        return self::ESTADOS[$this->estado] ?? $this->estado;
    }

    public function getProductoLabelAttribute(): ?string
    {
        return $this->producto ? (self::PRODUCTOS[$this->producto] ?? $this->producto) : null;
    }
}
