<?php
namespace App\Controller;

use App\Definition\Controller;
use Incoviba\old\Venta\Propietario;
use Incoviba\old\Common\Direccion;
use Incoviba\old\Inmobiliaria\Inmobiliaria;

class Ajax
{
	use Controller;

	protected static function setDefault()
	{
		self::$default = '';
	}
	public static function buscar()
	{
		$t = get('t');
		if ($t == null) {
			$t = get('tipo');
			if ($t == null) {
				return '';
			}
		}
		$method = 'buscar' . str_replace(' ', '', ucwords(str_replace('_', ' ', $t)));
		if (is_callable('self', $method)) {
			return self::$method();
		}
	}
	protected static function buscarBancos()
	{
		$bancos = \Model::factory(\Incoviba\old\Common\Banco::class)->whereNotEqual('nombre', '')->order_by_asc('nombre')->findMany();
		foreach ($bancos as &$banco) {
			$banco = $banco->as_array('nombre')['nombre'];
		}
		return json_encode($bancos);
	}
	protected static function buscarBanco()
	{
		$q = get('q');
		if ($q == null) {
			$q = get('query');
			if ($q == null) {
				return '';
			}
		}
		$bancos = \Model::factory(\Incoviba\old\Common\Banco::class)->whereLike('nombre', '%' . $q . '%')->order_by_asc('nombre')->findMany();
		foreach ($bancos as &$banco) {
			$banco = $banco->as_array('nombre')['nombre'];
		}
		return json_encode($bancos);
	}
	public static function comunas()
	{
		$id = post('region');
		$comunas = \Model::factory(\Incoviba\old\Common\Comuna::class)
			->select('comuna.*')
			->join('provincia', ['provincia.id', '=', 'comuna.provincia'])
			->where('provincia.region', $id)
			->order_by_asc('comuna.descripcion')
			->findMany();

		foreach ($comunas as &$comuna) {
			$comuna = $comuna->as_array('id', 'descripcion');
		}
		return json_encode($comunas);
	}
	public static function propietario()
	{
		$id = post('rut');
		$propietario = \Model::factory(\Incoviba\old\Venta\Propietario::class)->where('rut', $id)->findOne();
		if ($propietario) {
			$propietario = $propietario->as_array();
			return json_encode($propietario);
		}
		return null;
	}
	public static function direccion()
	{
		$id = post('direccion');
		$direccion = \Model::factory(\Incoviba\old\Common\Direccion::class)->findOne($id);
		$comuna = $direccion->comuna();
		$provincia = $comuna->provincia();
		$region = $provincia->region();
		$direccion = $direccion->as_array();
		$direccion['comuna'] = $comuna->as_array();
		$direccion['comuna']['provincia'] = $provincia->as_array();
		$direccion['comuna']['provincia']['region'] = $region->as_array();
		return json_encode($direccion);
	}
	public static function tipo_unidades()
	{
		$id = post('proyecto');
		$proyecto = \Model::factory(\Incoviba\old\Proyecto\Proyecto::class)->findOne($id);
		$tipos = $proyecto->tipoUnidades();
		foreach ($tipos as &$tipo) {
			$tipo = $tipo->as_array();
		}
		return json_encode($tipos);
	}
	public static function unidades()
	{
		$id_proyecto = post('proyecto');
		$id_tipo = post('tipo');

		$proyecto = model(\Incoviba\old\Proyecto\Proyecto::class)->findOne($id_proyecto);
		$unidades = $proyecto->unidadesDisponibles($id_tipo);
		foreach ($unidades as &$unidad) {
			$tipologia = $unidad->tipologia();
			$unidad = $unidad->as_array();
			$unidad['tipologia'] = $tipologia->as_array();
			if ($tipologia->tipologia()) {
				$unidad['tipologia']['tipologia'] = (array) $tipologia->tipologia();
				continue;
			}
			$unidad['tipologia']['tipologia'] = ['descripcion' => $tipologia->abreviacion];
		}
		return json_encode($unidades);
	}
	public static function unidades_precios()
	{
		$proyecto = model(\Incoviba\old\Proyecto\Proyecto::class)->findOne(post('proyecto'));
		$unidades = $proyecto->unidades();
		usort($unidades, function($a, $b) {
			$t = $a->tipo - $b->tipo;
			if ($t == 0) {
				return (int) $a->descripcion - (int) $b->descripcion;
			}
			return $t;
		});
		$output = [];
		foreach ($unidades as $u) {
			$info = [
				'id' => $u->id,
				'abreviacion' => $u->abreviacion,
				'descripcion' => $u->descripcion,
				'valor' => '--'
			];
			if ($u->precio()) {
				$info['valor'] = format('ufs', $u->precio()->valor, null, true);
			}
			$output []= $info;
		}
		return json_encode($output);
	}
	public static function operadores()
	{
		$id_proyecto = post('proyecto');
		$proyecto = \Model::factory(\Incoviba\old\Proyecto\Proyecto::class)->findOne($id_proyecto);
		$operadores = $proyecto->operadores();
		foreach ($operadores as &$operador) {
			$operador = [
				'id' => $operador->id,
				'abreviacion' => $operador->abreviacion
			];
		}
		return json_encode($operadores);
	}
	public static function promociones()
	{
		$id = post('proyecto');
		$proyecto = \Model::factory(\Incoviba\old\Proyecto\Proyecto::class)->findOne($id);
		$promociones = $proyecto->promociones();
		foreach ($promociones as &$promocion) {
			$promocion = $promocion->as_array();
		}
		return json_encode($promociones);
	}
	public static function nombres()
	{
		$nss = model(Propietario::class)->select('nombres')->orderByAsc('nombres')->findMany();
		$nombres = [];
		foreach ($nss as $n) {
			$ns = explode(' ', $n->nombres);
			foreach ($ns as $nombre) {
				$nombres []= $nombre;
			}
		}
		$nombres = array_values(array_unique($nombres));
		return json_encode($nombres);
	}
	public static function apellidos()
	{
		$aps = model(Propietario::class)->select('apellido_paterno')->orderByAsc('apellido_paterno')->findMany();
		$apellidos = [];
		foreach ($aps as $ap) {
			$apellidos []= $ap->apellido_paterno;
		}
		$aps = model(Propietario::class)->select('apellido_materno')->orderByAsc('apellido_materno')->findMany();
		foreach ($aps as $ap) {
			$apellidos []= $ap->apellido_paterno;
		}
		$apellidos = array_values(array_unique($apellidos));
		sort($apellidos);
		return json_encode($apellidos);
	}
	public static function calles()
	{
		$results = model(Direccion::class)->select('calle')->orderByAsc('calle')->findMany();
		$calles = [];
		foreach ($results as $result) {
			$calles []= $result->calle;
		}
		$calles = array_values(array_unique($calles));
		return json_encode($calles);
	}
	public static function inmobiliarias()
	{
		$q = post('rut');
		$inmobiliaria = model(Inmobiliaria::class)->findOne($q);
		return json_encode($inmobiliaria->as_array());
	}
}
?>
