<?php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class PagoTramite extends Model
{
    protected $table      = 'pagos';
    protected $primaryKey = 'id';
    public    $timestamps = false;
    public    $incrementing = false;

    // Tipos de pago (campo `tipo`)
    const TIPO_IMPUESTOS          = 0;
    const TIPO_MINUTA             = 1;
    const TIPO_TRANSFERENCIA      = 2;
    const TIPO_PROTOCOLO          = 3;
    const TIPO_PLANO_LOTE         = 4;
    const TIPO_VISADO_PLANO       = 5;
    const TIPO_MINUTA_DATOS_TEC   = 6;
    const TIPO_DERECHOS_REALES    = 7;

    protected $fillable = [
        'id', 'urbanizacion', 'distrito', 'manzano', 'lote',
        'idcliente', 'idcontrato', 'tipo', 'fecha',
        'idrecibo', 'descripcion', 'montobs', 'montosus',
        'tc', 'obs', 'cob', 'anul',
    ];

    // ── Relaciones ───────────────────────────────────────────────────────────

    public function cliente()
    {
        return $this->belongsTo(Cliente::class, 'idcliente');
    }

    public function contrato()
    {
        return $this->belongsTo(Contrato::class, 'idcontrato');
    }

    // ── Helpers ──────────────────────────────────────────────────────────────

    public static function tipoTexto(int $tipo): string
    {
        return match($tipo) {
            self::TIPO_IMPUESTOS        => 'Impuestos',
            self::TIPO_MINUTA           => 'Minuta',
            self::TIPO_TRANSFERENCIA    => 'Transferencia',
            self::TIPO_PROTOCOLO        => 'Protocolo',
            self::TIPO_PLANO_LOTE       => 'Plano de Lote',
            self::TIPO_VISADO_PLANO     => 'Visado de Plano',
            self::TIPO_MINUTA_DATOS_TEC => 'Minuta de Datos Técnicos',
            self::TIPO_DERECHOS_REALES  => 'Derechos Reales',
            default                     => 'Desconocido',
        };
    }

    public static function tipoDescripcion(int $tipo): string
    {
        return match($tipo) {
            self::TIPO_IMPUESTOS        => 'PAGO DE IMPUESTOS',
            self::TIPO_MINUTA           => 'ELABORACION DE MINUTA',
            self::TIPO_TRANSFERENCIA    => 'TRANSFERENCIA',
            self::TIPO_PROTOCOLO        => 'ELABORACION DE PROTOCOLO',
            self::TIPO_PLANO_LOTE       => 'ELABORACION DE PLANO DE LOTE',
            self::TIPO_VISADO_PLANO     => 'ELABORACION DE VISADO DE PLANO',
            self::TIPO_MINUTA_DATOS_TEC => 'ELABORACION DE MINUTA DE DATOS TECNICOS',
            self::TIPO_DERECHOS_REALES  => 'DERECHOS REALES',
            default                     => '',
        };
    }

    public function getTipoTextoAttribute(): string
    {
        return self::tipoTexto((int) $this->tipo);
    }
}