<?php
namespace Incoviba\Service\Venta;

use Incoviba\Common\Implement\Exception\EmptyResult;
use Incoviba\Repository;
use Incoviba\Service;
use Incoviba\Model;

class Unidad
{
    public function __construct(
        protected Repository\Venta\Unidad $unidadRepository,
        protected Precio    $precioService
    ) {}

    public function getById(int $unidad_id): Model\Venta\Unidad
    {
        return $this->process($this->unidadRepository->fetchById($unidad_id));
    }
    public function getByVenta(int $venta_id): array
    {
        return array_map([$this, 'process'], $this->unidadRepository->fetchByVenta($venta_id));
    }
    public function getByPropiedad(int $propiedad_id): array
    {
        return array_map([$this, 'process'], $this->unidadRepository->fetchByPropiedad($propiedad_id));
    }
    public function getByCierre(int $cierre_id): array
    {
        return array_map([$this, 'process'], $this->unidadRepository->fetchByCierre($cierre_id));
    }
    public function getDisponiblesByProyecto(int $proyecto_id): array
    {
        return $this->unidadRepository->fetchDisponiblesByProyecto($proyecto_id);
    }
    public function getByIdForSearch(int $unidad_id): array
    {
        return $this->unidadRepository->fetchByIdForSearch($unidad_id);
    }

    protected function process($unidad): Model\Venta\Unidad
    {
        try {
            $unidad->precios = $this->precioService->getByUnidad($unidad->id);
            $unidad->currentPrecio = $this->precioService->getVigenteByUnidad($unidad->id);
        } catch (EmptyResult) {
        }
        return $unidad;
    }
}
