<?php
namespace Incoviba\old\Inmobiliaria;

use Incoviba\Common\Alias\OldModel as Model;
use Incoviba\old\Common\Banco;
use Incoviba\old\Proyecto\Proyecto;

/**
 *
 * @author Aldarien
 *
 * @property int $rut
 * @property char $dv
 * @property string $razon
 * @property string $abreviacion
 * @property string $cuenta
 * @property Banco $banco
 * @property TipoSociedad $sociedad
 *
 */
class Inmobiliaria extends Model
{
	public static $_id_column = 'rut';

	public function banco()
	{
		return $this->cuenta()->banco();
		//return $this->belongsTo(Banco::class, 'banco')->findOne();
	}
	public function proyectos()
	{
		return $this->hasMany(Proyecto::class, 'inmobiliaria', 'rut')->orderByAsc('descripcion')->findMany();
	}
	public function nombre(bool $tipo = false)
	{
		return $this->abreviacion . (($tipo) ? ' ' . $this->sociedad()->abreviacion . '.' : '');
	}
	public function rut()
	{
		return format('rut', $this->rut) . '-' . $this->dv;
	}
	public function sociedad() {
		return $this->belongsTo(TipoSociedad::class, 'sociedad')->findOne();
	}
	public function razon(bool $tipo = false, bool $abreviado = false) {
		return $this->razon . (($tipo) ? ' ' . (($abreviado) ? $this->sociedad()->abreviacion . '.' : $this->sociedad()->descripcion) : '');
	}
	/**
	 * $data = ['descripcion', 'calle', 'numero', 'extra', 'comuna']
	 */
	public function addProyecto(array $data)
	{
		//$proyecto = model(Proyecto::class)->where('inmobiliaria', $this->rut)->where('descripcion', $data['descripcion'])->findOne();
		$data = [
			'inmobiliaria' => $this->rut,
			'descripcion' => $data['descripcion']
		];
		$proyecto = (new Factory(Proyecto::class))->where($data)->find();
		if (!$proyecto) {
			//$proyecto = model(Proyecto::class)->create();
			$proyecto = (new Factory(Proyecto::class))->create($data);
			/*$proyecto->inmobiliaria = $this->rut;
			$proyecto->descripcion = $data['descripcion'];*/
			$proyecto->setDireccion($data);
			$proyecto->save();
		}
	}
	public function removeProyecto(array $data)
	{
		$proyecto = (new Factory(Proyecto::class))->where([
			'inmobiliaria' => $this->rut,
			'descripcion' => $data['descripcion']
		])->find();
		if ($proyecto) {
			$proyecto->delete();
		}
	}
	public function cuenta()
	{
		if (count($this->cuentas()) == 0) {
			return false;
		}
		return $this->cuentas()[0];
	}
	public function cuentas()
	{
		return $this->hasMany(Cuenta::class, 'inmobiliaria', 'rut')->findMany();
	}
	public function addCuenta(array $data)
	{
		if (!is_numeric($data['banco'])) {
			$banco = (new Factory(Banco::class))->where(['descripcion' => $data['banco']])->find();
			$data['banco'] = $banco->id;
		}
		$data = [
			'inmobiliaria' => $this->rut,
			'cuenta' => $data['cuenta'],
			'banco' => $data['banco']
		];
		$cuenta = (new Factory(Cuenta::class))->where($data)->find();
		if (!$cuenta) {
			$cuenta = (new Factory(Cuenta::class))->create($data);
			$cuenta->save();
		}
	}
	public function removeCuenta(array $data)
	{
		$cuenta = (new Factory(Cuenta::class))->where(['inmobiliaria' => $this->rut]);
		if (isset($data['cuenta'])) {
			$cuenta = $cuenta->where(['cuenta' => $data['cuenta']]);
		}
		if (isset($data['banco'])) {
			if (!is_numeric($data['banco'])) {
				$banco = (new Factory(Banco::class))->where(['descripcion' => $data['banco']])->find();
				$data['banco'] = $banco->id;
			}
			$cuenta = $cuenta->where(['banco' => $data['banco']]);
		}
		$cuenta = $cuenta->find();
		if ($cuenta) {
			$cuenta->delete();
		}
	}
	public function modify(array $data)
	{
		$fields = ['rut', 'dv', 'razon', 'abreviacion'];
		foreach ($data as $column => $value) {
			if (array_search($column, $fields) !== false) {
				$this->$column = $value;
			}
		}
		$this->cuenta()->modify($data);
	}
}
?>
