<?php
namespace Incoviba\Model\Venta;

use Incoviba\Common\Ideal;

class Propiedad extends Ideal\Model
{
    public array $unidades;

    public function departamentos(): array
    {
        return array_filter($this->unidades, function(Unidad $unidad) {return $unidad->proyectoTipoUnidad->tipoUnidad->descripcion === 'departamento';});
    }
    public function estacionamientos(): array
    {
        return array_filter($this->unidades, function(Unidad $unidad) {return $unidad->proyectoTipoUnidad->tipoUnidad->descripcion === 'estacionamiento';});
    }
    public function bodegas(): array
    {
        return array_filter($this->unidades, function(Unidad $unidad) {return $unidad->proyectoTipoUnidad->tipoUnidad->descripcion === 'bodega';});
    }

    protected float $vendible;
    public function vendible(): float
    {
        return array_reduce($this->departamentos(), function(float $sum, Unidad $unidad) {
            return $sum + $unidad->proyectoTipoUnidad->vendible();
        }, 0);
    }

    public function summary(): string
    {
        return implode(' - ', array_merge(
            array_map(function(Unidad $unidad) {
                return $unidad->descripcion;
            }, $this->departamentos()),
            array_map(function(Unidad $unidad) {
                return "E{$unidad->descripcion}";
            }, $this->estacionamientos()),
            array_map(function(Unidad $unidad) {
                return "B{$unidad->descripcion}";
            }, $this->bodegas())
        ));
    }

    public function jsonSerialize(): mixed
    {
        return [
            'departamentos' => $this->departamentos(),
            'estacionamientos' => $this->estacionamientos(),
            'bodegas' => $this->bodegas(),
            'summary' => $this->summary()
        ];
    }
}
