<?php
namespace App\Controller\API;

use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use Incoviba\old\Proyecto\Proyecto;

class Unidades {
  public function no_reservadas(Request $request, Response $response, $id_proyecto, $id_tipo) {
    $proyecto = model(Proyecto::class)->findOne($id_proyecto);
    if (!$proyecto) {
      throw new \InvalidArgumentException('Proyecto identificado por ' . $id_proyecto . ' no existe.');
    }
    $unidades = $proyecto->unidades($id_tipo);
    $unidades = array_filter($unidades, function($item) {
      return !$item->isVendida() and !$item->isReservada();
    });
    $unidades = array_map(function($item) {
      return $item->asArray();
    }, $unidades);
    usort($unidades, function($a, $b) {
      $ap = strpos($a['descripcion'], ' ');
      $ad = $a['descripcion'];
      if ($ap != false) {
        $ad = substr($ad, 0, $ap);
      }
      $bd = $b['descripcion'];
      $bp = strpos($b['descripcion'], ' ');
      if ($bp != false) {
        $bd = substr($bd, 0, $bp);
      }
      return strcmp(
        str_pad($ad, 4, '0', \STR_PAD_LEFT),
        str_pad($bd, 4, '0', \STR_PAD_LEFT)
      );
    });
    $output = array_values($unidades);
    $response->getBody()->write(\json_encode($output));
    return $response->withHeader('Content-Type', 'application/json');
  }
}
