<?php
namespace Incoviba\Model\Venta;

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

class Pie extends Model
{
    public DateTimeInterface $fecha;
    public float $valor;
    public ?float $uf;
    public int $cuotas;
    public ?Pie $asociado;
    public ?Pago $reajuste;

    public array $cuotasArray;
    public function cuotas(bool $pagadas = false): array
    {
        if (!$pagadas) {
            return $this->cuotasArray;
        }
        return array_filter($this->cuotasArray, function(Cuota $cuota) {
            return $cuota->pago->currentEstado->tipoEstadoPago->descripcion !== 'no pagado';
        });
    }

    public function pagado(string $moneda = Pago::UF): float
    {
        return array_reduce($this->cuotas(true), function(float $sum, Cuota $cuota) use ($moneda) {
            return $sum + $cuota->pago->valor($moneda);
        }, 0);
    }

    public function jsonSerialize(): mixed
    {
        return array_merge(parent::jsonSerialize(), [
            'fecha' => $this->fecha->format('Y-m-d H:i:s'),
            'valor' => $this->valor,
            'uf' => $this->uf ?? 1,
            'cuotas' => $this->cuotas,
            'asociado' => $this->asociado ?? '',
            'reajuste' => $this->reajuste ?? ''
        ]);
    }
}
