<?php
class Dinero_model extends CI_Model {
	public function printSaldo() {
		$this->db->select('monto');
		$this->db->from('dineros');
		$this->db->where('id_tipo_dinero', 0);
		$this->db->order_by('id', 'ASC');
		$dinero = $this->db->get()->row_array();
		$_SESSION['saldo'] = $dinero['monto'];

		$this->db->select('SUM(total) AS total, SUM(adeudado) as adeudado');
		$this->db->from('ventas v');
		$this->db->where('v.vendido !=', 1);
		$this->db->where('v.deleted', 0);
		$preventas = $this->db->get()->row_array();
		$total = $preventas['total'] - $preventas['adeudado'];
		$_SESSION['preventas'] = $total;
	}

	public function get($id) {
		$this->db->select('*');
		$this->db->from('dineros');
		$this->db->where('id', $id);
		$this->db->where('deleted', 0);
		$query = $this->db->get();
		$dinero = $query->row_array();
		
		if (!empty($dinero)) {
			return $dinero;
		}
		else{
			return [];
		}
	}

	public function get_all() {
		$this->db->select('*');
		$this->db->from('dineros d');
		$this->db->where_in('d.id_tipo_dinero', [1, 2]);
		$this->db->where('d.deleted', 0);
		$this->db->order_by('d.fecha', 'DESC');
		$query = $this->db->get();

		return $query->result_array();
	}

	public function save($data) {
		//TODO: AJUSTAR SALDO
		$this->db->select('*');
		$this->db->from('dineros d');
		$this->db->where('d.id_tipo_dinero', 0);
		$this->db->where('d.deleted', 0);
		$query = $this->db->get();

		$saldo = $query->row_array();

		//revisar si viene id y si viene se hace update
		if (empty($data['id'])) {
			$data['created'] = date('Y-m-d H:i:s');
			$this->db->insert('dineros', $data);
			$idDinero = $this->db->insert_id();
		}
		else {
			//Actualizamos el saldo a antes de que exista el movimiento de dinero
			$this->db->select('*');
			$this->db->from('dineros d');
			$this->db->where('d.id', $data['id']);
			$this->db->where('d.deleted', 0);
			$query = $this->db->get();

			$previo = $query->row_array();

			//Si es gasto se SUMA al saldo
			if ($data['id_tipo_dinero'] == 1) {
				$saldo['monto'] = $saldo['monto'] + $previo['monto'];
			}
			//Si es ingreso se RESTA del saldo
			else {
				$saldo['monto'] = $saldo['monto'] - $previo['monto'];
			}

			$this->db->where('id', $data['id']);
			$this->db->update('dineros', $data);
			$idDinero = $data['id'];
		}

		//Actualizamos el Saldo con el movimientode dinero
		//Si es gasto se resta del saldo
		if ($data['id_tipo_dinero'] == 1) {
			$dinero['monto'] = $saldo['monto'] - $data['monto'];
		}
		//Si es ingreso se suma
		else {
			$dinero['monto'] = $saldo['monto'] + $data['monto'];
		}

		$this->db->where('id', $saldo['id']);
		$this->db->update('dineros', $dinero);


		return $idDinero;
	}

	public function delete($id) {
		//revisar si viene id y si viene se hace update
		if (!empty($id)) {
			//TODO: AJUSTAR SALDO
			$this->db->select('*');
			$this->db->from('dineros d');
			$this->db->where('d.id_tipo_dinero', 0);
			$this->db->where('d.deleted', 0);
			$query = $this->db->get();
			$saldo = $query->row_array();

			$this->db->select('*');
			$this->db->from('dineros d');
			$this->db->where('d.id', $id);
			$this->db->where('d.deleted', 0);
			$query = $this->db->get();
			$previo = $query->row_array();

			//Si es gasto se SUMA al saldo
			if ($previo['id_tipo_dinero'] == 1) {
				$dinero['monto'] = $saldo['monto'] + $previo['monto'];
			}
			//Si es ingreso se RESTA del saldo
			else {
				$dinero['monto'] = $saldo['monto'] - $previo['monto'];
			}
			$this->db->where('id', $saldo['id']);
			$this->db->update('dineros', $dinero);

			$this->db->set('deleted', 1, FALSE);
			$this->db->where('id', $id);
			$this->db->update('dineros');
		}
	}

	/**
  * Recalcula el total de dinero que debería tener la tienda
  * Suma todas las ventas en estados vendidos
  * Suma todas las compras de tipo factura y din
  * Suma todos las entradas de dinero
	*/

	public function recalcularTotal() {
		$this->db->select('monto');
		$this->db->from('dineros');
		$this->db->where('id', 1);
		$anterior = $this->db->get()->row_array();

		//suma todas las ventas
		$this->db->select('SUM(total) AS total');
		$this->db->from('ventas v');
		$this->db->where('v.deleted', 0);
		$this->db->where('v.vendido', 1);
		$this->db->where('v.id_tipo_venta !=', 4);
		$ventas = $this->db->get()->row_array();

		//suma todas las compras
		$this->db->select('SUM(total) AS total');
		$this->db->from('compras c');
		$this->db->where('c.deleted', 0);
		$this->db->where('c.contable', 1);
		$compras = $this->db->get()->row_array();

		//suma y resta todos los dineros
		$this->db->select('SUM(CASE WHEN id_tipo_dinero = 2 THEN monto ELSE (monto*-1) END) AS total');
		$this->db->from('dineros d');
		$this->db->where('d.deleted', 0);
		$this->db->where_in('d.id_tipo_dinero', [1,2]);
		$dineros = $this->db->get()->row_array();

		//Suma total dineros + total ventas - total compras
		$dinero['monto'] = $ventas['total'] + $dineros['total'] - $compras['total'];

		$result = [
			'Monto Anterior' => clp($anterior['monto']),
			'Monto actualizado' => clp($dinero['monto']),
			'Ventas' => clp($ventas['total']),
			'Compras' => clp($compras['total']),
			'Dineros' => clp($dineros['total'])
		];

		//Guarda Total
		$this->db->where('id', 1);
		$this->db->update('dineros', $dinero);

		return $result;
	}

}