<?php
namespace Incoviba\Model;

use Incoviba\Common\Alias\Model;
use Incoviba\Common\Ideal;

class Proyecto extends Ideal\Model
{
    protected Inmobiliaria $inmobiliaria;
    public string $descripcion;
    protected Direccion $direccion;
    public Proyecto\Terreno $terreno;
    public Proyecto\Superficie $superficie;
    public float $corredor;
    public int $pisos;
    public int $subterraneos;
    protected Proyecto\Etapa $etapa;

    protected array $estados;
    protected Proyecto\EstadoProyecto $currentEstado;

    public function inmobiliaria(): Inmobiliaria
    {
        if (!isset($this->inmobiliaria)) {
            $this->inmobiliaria = $this->runFactory('inmobiliaria');
        }
        return $this->inmobiliaria;
    }
    public function direccion(): Direccion
    {
        if (!isset($this->direccion)) {
            $this->direccion = $this->runFactory('direccion');
        }
        return $this->direccion;
    }
    public function estados(): array
    {
        if (!isset($this->estados)) {
            $this->estados = $this->runFactory('estados');
        }
        return $this->estados;
    }
    public function currentEstado(): Proyecto\EstadoProyecto
    {
        if (!isset($this->currentEstado)) {
            $this->currentEstado = $this->runFactory('currentEstado');
        }
        return $this->currentEstado;
    }

    public function jsonSerialize(): mixed
    {
        return array_merge(parent::jsonSerialize(), [
            'inmobiliaria' => $this->inmobiliaria(),
            'descripcion' => $this->descripcion,
            'direccion' => $this->direccion(),
            'terreno' => $this->terreno,
            'superficie' => $this->superficie,
            'corredor' => $this->corredor,
            'pisos' => $this->pisos,
            'subterraneos' => $this->subterraneos
        ]);
    }
}
