<?php
namespace Incoviba\Model\Venta;

use DateTimeInterface;
use Incoviba\Common\Ideal\Model;
use Incoviba\Model\Banco;

class Pago extends Model
{
    const UF = 'uf';
    const PESOS = 'pesos';

    public float $valor;
    public ?Banco $banco;
    public ?TipoPago $tipoPago;
    public ?string $identificador;
    public ?DateTimeInterface $fecha;
    public ?float $uf;
    public ?string $pagador;
    public ?Pago $asociado;

    public array $estados;
    public EstadoPago $currentEstado;

    public function valor(string $moneda = Pago::UF): float
    {
        return $this->valor / (($moneda === Pago::UF) ? ($this->uf > 0 ? $this->uf : 1) : 1);
    }

    public function jsonSerialize(): mixed
    {
        return array_merge(parent::jsonSerialize(), [
            'valor' => $this->valor,
            'banco' => $this->banco ?? '',
            'tipo_pago' => $this->tipoPago ?? '',
            'identificador' => $this->identificador ?? '',
            'fecha' => $this->fecha->format('Y-m-d H:i:S') ?? '',
            'uf' => $this->uf ?? 1,
            'pagador' => $this->pagador ?? '',
            'asociado' => $this->asociado ?? ''
        ]);
    }
}
