<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

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

    // tipmov: 1 = cuota  |  2 = abono cuota  |  5 = cargo ajuste  |  6 = abono ajuste
    const TIPMOV_CUOTA        = 1;
    const TIPMOV_ABONO_CUOTA  = 2;
    const TIPMOV_CARGO_AJUSTE = 5;
    const TIPMOV_ABONO_AJUSTE = 6;

    protected $fillable = [
        // ── campos originales que ya tenías ──
        'idcontrato', 'idcliente', 'numcuo',
        'cargo', 'abono', 'saldo', 'fechaven',
        'tipmov',

        // ── campos adicionales necesarios para ajustes ──
        'id', 'fecha', 'numman', 'numrec', 'tiprec', 'numaju',
        'tipo', 'tipmon', 'abono2', 'abono3', 'tipocambio',
        'anulado', 'titulo', 'montosus', 'montobs', 'fechaanulado',
        'idcobrador', 'idvendedor', 'respons',
        'flag', 'numcomp', 'fechcomp', 'clascomp',
    ];

    protected $casts = [
        // ── tus casts originales ──
        'idcontrato' => 'integer',
        'idcliente'  => 'integer',
        'numcuo'     => 'integer',
        'cargo'      => 'float',
        'abono'      => 'float',
        'saldo'      => 'float',
        'tipmov'     => 'integer',

        // ── nuevos (fechaven era 'date', lo dejamos igual) ──
        'fechaven'     => 'date',
        'anulado'      => 'integer',
        'abono2'       => 'float',
        'abono3'       => 'float',
        'tipocambio'   => 'float',
        'flag'         => 'integer',
        // 'fechaanulado' => 'date',
    ];

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

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

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

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

    public function getTipoTextoAttribute(): string
    {
        return match((int) $this->tipmov) {
            self::TIPMOV_CARGO_AJUSTE => 'Cargo',
            self::TIPMOV_ABONO_AJUSTE => 'Abono',
            self::TIPMOV_CUOTA        => 'Cuota',
            self::TIPMOV_ABONO_CUOTA  => 'Abono Cuota',
            default                   => 'Desconocido',
        };
    }

    public function getBadgeAttribute(): string
    {
        return in_array((int) $this->tipmov, [self::TIPMOV_CARGO_AJUSTE, self::TIPMOV_CUOTA])
            ? 'danger'
            : 'success';
    }
}