<?php
namespace Incoviba\Model\Venta;

use JsonSerializable;

class FormaPago implements JsonSerializable
{
    public ?Pie $pie;
    public ?Escritura $escritura;
    public ?BonoPie $bonoPie;
    public ?Subsidio $subsidio;
    public ?Credito $credito;
    public ?Pago $devolucion;

    public function anticipo(string $moneda = Pago::UF): float
    {
        $sum = 0;
        if ($this->pie !== null) {
            $sum += $this->pie->pagado($moneda);
            if (isset($this->pie->reajuste) and $this->pie->reajuste !== null) {
                $sum += $this->pie->reajuste->valor($moneda);
            }
        }
        if ($this->escritura !== null) {
            $sum += $this->escritura->pago->valor($moneda);
        }
        return $sum;
    }
    public function total(string $moneda = Pago::UF): float
    {
        $sum = $this->anticipo($moneda);
        if (isset($this->bonoPie)) {
            $sum += $this->bonoPie->pago->valor($moneda);
        }
        if (isset($this->subsidio)) {
            $sum += $this->subsidio->ahorro->valor($moneda);
            $sum += $this->subsidio->subsidio->valor($moneda);
        }
        if (isset($this->credito)) {
            $sum += $this->credito->pago->valor($moneda);
        }
        return $sum;
    }
    public function ids(): array
    {
        return [
            'pie_id' => $this->pie?->id,
            'escritura_id' => $this->escritura?->id,
            'bono_pie_id' => $this->bonoPie?->id,
            'credito_id' => $this->credito?->id,
            'subsidio_id' => $this->subsidio?->id,
            'devolucion_id' => $this->devolucion?->id
        ];
    }

    public function jsonSerialize(): mixed
    {
        return [
            'pie' => $this->pie ?? null,
            'escritura' => $this->escritura ?? null,
            'bono_pie' => $this->bonoPie ?? null,
            'subsidio' => $this->subsidio ?? null,
            'credito' => $this->credito ?? null,
            'devolucion' => $this->devolucion ?? null
        ];
    }
}
