<?php

namespace App\Models;

use App\Traits\MultiTenantScope;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class CreditRestructureLog extends Model
{
    use MultiTenantScope;

    public const TYPE_RESTRUCTURE = 'restructure';

    public const TYPE_REFINANCE = 'refinance';

    public const TYPE_RENEWAL = 'renewal';

    public const TYPE_EXTENSION = 'extension';

    public const TYPE_INTEREST_CAPITALIZATION = 'interest_capitalization';

    public const TYPE_CONDONATION = 'condonation';

    protected $fillable = [
        'original_credit_id',
        'new_credit_id',
        'company_id',
        'performed_by_user_id',
        'type',
        'previous_balance',
        'new_principal',
        'new_interest_rate',
        'new_installment_count',
        'new_periodicity',
        'additional_capital',
        'capitalized_interest',
        'reason',
        'metadata',
    ];

    protected $casts = [
        'previous_balance' => 'decimal:2',
        'new_principal' => 'decimal:2',
        'new_interest_rate' => 'decimal:2',
        'additional_capital' => 'decimal:2',
        'capitalized_interest' => 'decimal:2',
        'metadata' => 'array',
    ];

    /*=========================================================
    | RELACIONES
    =========================================================*/
    public function originalCredit(): BelongsTo
    {
        return $this->belongsTo(Credit::class, 'original_credit_id');
    }

    public function newCredit(): BelongsTo
    {
        return $this->belongsTo(Credit::class, 'new_credit_id');
    }

    public function company(): BelongsTo
    {
        return $this->belongsTo(Company::class);
    }

    public function performedBy(): BelongsTo
    {
        return $this->belongsTo(User::class, 'performed_by_user_id');
    }

    /*=========================================================
    | HELPERS
    =========================================================*/
    public function getTypeLabel(): string
    {
        return match ($this->type) {
            self::TYPE_RESTRUCTURE => 'Reestructuración',
            self::TYPE_REFINANCE => 'Refinanciación',
            self::TYPE_RENEWAL => 'Renovación',
            self::TYPE_EXTENSION => 'Extensión',
            self::TYPE_INTEREST_CAPITALIZATION => 'Capitalización de Intereses',
            self::TYPE_CONDONATION => 'Condonación',
            default => ucfirst($this->type),
        };
    }
}
