<?php
    require_once(__DIR__.'/../config/DB/Database.php');

    class factura
    {   
        private $con;

        public $id_factura;
        public $id_cliente;
        public $id_mayorista;
        public $estado_factura;
        public $condiciones;
        public $condiciones2;
        public $observaciones;
        public $observaciones2;
        public $zona;
        public $comentarios;
        public $tnegocio;
        public $fecha_factura;
        public $numero_factura;
        public $nombre_cliente;
        public $poblacion_cliente;
        public $ejecutivo_cliente;
        public $direccion_cliente;
        public $nombre_mayorista;
        public $nombre_zona;
        public $label_estado_factura;
        public $total_venta;


        public function __construct()
        {
            $this->con = Database::GetConnection();
        }

        private function GetObjectData($results)
        {
            $array = [];

            while($row = $results->fetch_assoc()) {
                $factura = new factura();
                $factura->con->close();
                unset($factura->con);
                $factura->id_factura = $row['id_factura'];
                $factura->id_cliente = $row['id_cliente'];
                $factura->id_mayorista = $row['id_mayorista'];
                $factura->estado_factura = $row['estado_factura'];
                $factura->condiciones = $row['condiciones'];
                $factura->condiciones2 = $row['condiciones2'];
                $factura->observaciones = $row['observaciones'];
                $factura->observaciones2 = $row['observaciones2'];
                $factura->zona = $row['zona'];
                $factura->fecha_factura = date("d/m/Y", strtotime($row['fecha_factura']));
                $factura->numero_factura = $row['numero_factura'];
                $factura->nombre_cliente = $row['nombre_cliente'];
                $factura->tnegocio = $row['tnegocio'];
                $factura->poblacion_cliente = $row['poblacion_cliente'];
                $factura->ejecutivo_cliente = $row['firstname']." ".$row["lastname"];
                $factura->nombre_mayorista = $row['nombre_mayorista'];
                $factura->nombre_zona = $row['nombre_zona'];
                $factura->label_estado_factura = ($factura->estado_factura == 1) ? 'label-warning' : (($factura->estado_factura == 2) ? 'label-success' : 'label-danger');
                $factura->total_venta = $row['total_venta'];
                $factura->direccion_cliente = $row['direccion_cliente'];
                $factura->comentarios = $row['comentarios'];
                array_push($array,$factura);
            }

            return $array;


        }

        public function ObtenerFacturas($permiso, $usr_id)
        {
            $qTables = " facturas, clientes, mayorista,zona,users ";
            $qWhere = " WHERE 
                            facturas.id_cliente=clientes.id_cliente 
                        and facturas.id_mayorista=mayorista.id_mayorista
                        and facturas.zona=zona.id_zona
                        and clientes.ejecutivo_cliente = users.user_id
                        and facturas.estado_factura = 1 ";
            
            if($permiso != 1) $qWhere .= ' and users.user_id = ?';
            
            $query = "SELECT * FROM ".$qTables." ".$qWhere." "."  ORDER BY facturas.id_factura desc";

            $st = $this->con->prepare($query);

            if($permiso != 1) $st->bind_param('i', $usr_id);
            
            $st->execute();
            
            $results = $st->get_result();
            
            $facturas = $this->GetObjectData($results);
            
            return $facturas;
        }

        public function ObtenerFactura($id)
        {
            $query = "SELECT * FROM facturas, clientes, mayorista, zona, users
                      WHERE facturas.id_cliente = clientes.id_cliente
                      AND facturas.id_mayorista=mayorista.id_mayorista
                      AND facturas.zona=zona.id_zona
                      AND clientes.ejecutivo_cliente = users.user_id
                      AND facturas.estado_factura = 2
                      AND facturas.id_factura = ?";

            $st = $this->con->prepare($query);

            $st->bind_param('i', $id);

            $st->execute();

            $result = $st->get_result();
            
            $factura = $this->GetObjectData($result);

            return $factura;
            
        }


        public function Actualizar($datos)
        {
             // Mysql query
           $query = 'UPDATE facturas
            SET 
                id_cliente = ?, estado_factura = ?, id_mayorista = ?, 
                condiciones = ?, condiciones2 = ?, observaciones = ?,
                observaciones2 = ?, zona = ?, comentarios = ?
            WHERE 
                    id_factura = ?';

            // Preparing statement
            $st = $this->con->prepare($query);

            // Setting values for query
            $st->bind_param(
                'iiissssssi', 
                $datos->id_cliente,
                $datos->estado_factura,
                $datos->id_mayorista,
                $datos->condiciones,
                $datos->condiciones2,
                $datos->observaciones,
                $datos->observaciones2,
                $datos->zona,
                $datos->comentarios,
                $datos->id_factura
            );

            // Execute
            $st->execute();

            // Check if everything is correct
            if($st->affected_rows > 0)
            {
                return 1;
            }
            else
            {
                return 0;
            }
        }
    }

    /*
    $obj = new factura();

    $consulta = $obj->ObtenerFacturas(2,11);

    echo "<pre>";
        print_r($obj->GetObjectData($consulta));
    echo "</pre>";
    exit;
    

    $obj = new factura();

    $consulta = $obj->ObtenerFactura(2436);

    echo "<pre>";
    print_r($consulta);    
    echo "</pre>";
   */
    
    