<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class PreciosPorBien extends Model
{
    use HasFactory;

    protected $appends = [
        'precio_final',
    ];

    protected $table = 'precios_por_bien';

    public $timestamps = false;

    protected $fillable = [
        'bien_id',
        'precio',
        'porcentaje_utilidad',
        'fecha_registro',
        'cedula_usuario',
    ];

    protected $casts = [
        'bien_id' => 'integer',
        'precio' => 'decimal:2',
        'porcentaje_utilidad' => 'decimal:2',
    ];

    public function bien(): BelongsTo
    {
        return $this->belongsTo(Bien::class, 'bien_id');
    }

    public function usuario(): BelongsTo
    {
        return $this->belongsTo(Usuario::class, 'cedula_usuario', 'cedula');
    }

    public function getBienReferenciaAttribute(): string
    {
        $codigo = trim((string) data_get($this->bien, 'codigo', ''));
        $descripcion = trim((string) data_get($this->bien, 'descripcion', ''));

        return trim($codigo . ($descripcion !== '' ? ' - ' . $descripcion : ''));
    }

    public function getUsuarioReferenciaAttribute(): string
    {
        $cedula = trim((string) ($this->cedula_usuario ?? ''));
        $nombre = trim((string) data_get($this->usuario, 'nombre', ''));

        return trim($cedula . ($nombre !== '' ? ' - ' . $nombre : ''));
    }

    public function getPrecioFinalAttribute(): float
    {
        $precioBase = (float) ($this->precio ?? 0);
        $porcentajeUtilidad = (float) ($this->porcentaje_utilidad ?? 0);

        return round($precioBase + ($precioBase * $porcentajeUtilidad / 100), 2);
    }
}