<?php namespace App\Http\Controllers;

use App\Custom\SQLConnection; 
use App\Custom\Misc;
use Request;
use Session;
use DateTime;
use Illuminate\Support\Facades\Input;
use DB;
use stdClass;

// use Illuminate\Session\TokenMismatchException;


class SAASController extends Controller

{
   


    public static function obtenerAdministracionClientes(){
        return view('/saas/administracionClientes');
    }

    public static function obtenerAdministracionClientesInfo(){
    	$cliente	= Session::get('usuario')->cliente['client_id'];
	  	$datos	=SQLConnection::backendStoreProcedure('SAAS_Clientes_', array('ADMINISTRACION', null,null,$cliente), 'select');
        foreach ($datos as $key => $dato)
        {
           $dato->pais = '<span class="flag-icon flag-icon-background flag-icon-'. strtolower($dato->pais) .'"></span>'; 
           $datos[$key] = $dato;  
        }
        return json_encode($datos);
    }

    public static function nuevaConsulta(){
        return view('/saas/nuevaConsulta');
    }

    public static function resultadoNuevaConsulta(){
        return view('/saas/resultadoNuevaConsulta');
    }

    public static function busquedaPadron() { 
        $cliente    = Session::get('usuario')->cliente['client_id'];
        $cc =   'AR';
        $country = SQLConnection::backendStoreProcedure('backend_obtener_paises', array(), 'select');
        $ident = SQLConnection::backendStoreProcedure('backend_obtener_identificadores_pais', array($cc), 'select');

        return view('/saas/busqueda_padron')->with(compact(['cliente', 'cc', 'country', 'ident']));
    }

    public static function IdentificadoresPais() {
        $cc = Request::input('country_code');
        $ident = DB::select('EXEC dbo.backend_obtener_identificadores_pais '.$cc);
        return json_encode($ident);
    }

    public static function busquedaDataPadron() {
        $country = Request::input('country_code');
        $padron = DB::select('EXEC dbo.LN_busqueda_padron ?,?', array(Request::input('identificador') , Request::input('numero')) );
        return json_encode($padron);    
    }

    public static function clienteNew() {
        $cliente    = Session::get('usuario')->cliente['client_id'];
        $identificador = Request::input('identificador');
        $numero = Request::input('numero');
        $nombre = Request::input('nombre_persona');
        $id_padron = Request::input('id_padron');
        $fecha_hoy = date("d/m/Y"); 
        $existe = 0;
        $datos  =SQLConnection::backendStoreProcedure('SAAS_Clientes_', array('ADMINISTRACION', null,null,$cliente), 'select');
        foreach ($datos as $data) {
            if($data->id_padron == $id_padron) {
                $existe = 1;
                break;
            }
        }

        return view('/modals/saas/nuevoClienteModal')->with(compact(['cliente', 'identificador', 'numero', 'nombre','id_padron','existe','fecha_hoy']));
    }

    public static function clienteInsert() {

// Alta del cliente
        $cliente            = Session::get('usuario')->cliente['client_id'];
        $user_id            = Session::get('usuario')->user_id; 
        $id_padron          = Request::input('id_padron');
        $nro_cliente        = Request::input('nro_cliente');
        $fecha_alta         = ('' != Request::input('fecha_alta')) ? date_create_from_format('!d/m/Y', Request::input('fecha_alta')) : '';
        $direccion          = Request::input('direccion');
        $localidad          = Request::input('localidad');
        $provincia          = Request::input('provincia');
        $codpos             = Request::input('codpos');
        $telefono           = Request::input('telefono');
        $nombre_contacto    = Request::input('nombre_contacto');  
        $email_contacto     = Request::input('email_contacto'); 
        $telefono_contacto  = Request::input('telefono_contacto'); 
        $adicionales        = Request::input('adicionales'); 
     
        $params = array(
                    'INSERT',  // accion
                    $user_id,  
                    '0',       // saas_cliente
                    $cliente,  
                    $nro_cliente,  
                    $id_padron,  
                    $direccion,  
                    $localidad,  
                    $provincia,  
                    '',         // pais
                    $codpos,  
                    $telefono,  
                    $nombre_contacto, 
                    $email_contacto,  
                    $telefono_contacto,  
                    $adicionales,  
                    '123456',  // clave
                    '0',       // clave_temporal
                    $fecha_alta,  // vigencia_desde
                    '',        // vigencia_hasta
                    '1'        // activo 
                    ); 

        $datos = SQLConnection::backendStoreProcedure('SAAS_Clientes_', $params, 'selectOne');

        $saas_cliente = $datos->saas_cliente; 

// Alta de los usuarios (solo los que tienen nombre y email)
        $usuario   = $_POST['usuario_nombre'];
        $sector    = $_POST['usuario_sector'];
        $email     = $_POST['usuario_email'];

        foreach( $usuario as $key => $u) 
        {
            if (!empty($usuario[$key]) && !empty($email[$key]))
            {
                $params = array(
                                'INSERT',  // accion
                                $user_id,  
                                '0',       // saas_usuario
                                $saas_cliente,  
                                $email[$key],  // el username es el email 
                                $sector[$key],  
                                $usuario[$key],  
                                $email[$key],  
                                '',  
                                '123456',  // clave
                                '0',       // clave_temporal
                                '',        // datos_adicionales
                                '',        // vigencia_desde
                                '',        // vigencia_hasta
                                '1'        // activo 
                                ); 
                $datos = SQLConnection::backendStoreProcedure('SAAS_Usuarios_', $params, 'selectOne');
            }

        }
        return "ok"; 
    }

    public static function controlUsuarios()
    {
        $cliente    = Session::get('usuario')->cliente['client_id'];
        $usuario   = $_POST['usuario_nombre'];
        $sector    = $_POST['usuario_sector'];
        $email     = $_POST['usuario_email'];

        $usuario = array_filter($usuario);
        $email = array_filter($email);
        $error = "ok"; 
        
        // Validación de direcciones de emails
        $res = filter_var(Request::input('email_contacto'), FILTER_VALIDATE_EMAIL); 
        if (!($res)) { $error = "novalido"; } 

        if ($error=='ok' && count($email) > 0)
        {
            foreach( $email as $key => $username) 
            {
                $username = trim($username);
                $res = filter_var($username, FILTER_VALIDATE_EMAIL); 
                if (!($res)) { $error = "novalido"; break;} 
            }
        }
        
        // Controlamos que los usuarios cargados tengan el nombre y el email.
        if ($error=='ok' && count($email) > 0 || count($usuario) > 0) 
        {
            foreach( $usuario as $key => $u) 
            {
               if (( empty($email[$key]) && !empty($usuario[$key])) ||
                   (!empty($email[$key]) &&  empty($usuario[$key])))
               {
                $error = 'error'; 
                break; 
               }
            }
        }
        
        // Controlamos que no haya repetidos
        if ($error=='ok' && count($email) > 0) 
        {
            $unicos = array_unique($email);
            $cant_unicos = count($unicos);
            $todos       = count($email);
            if($todos > $cant_unicos){
              $error="repetidos"; 
            }
        }

        // Controlamos que no esté cargado nungún usuario en la BD (y le mostramos en una lista cuáles ya están)
        $estan_BD = []; 
        if ($error=='ok' && count($email) > 0) 
        {
            foreach( $email as $key => $username) 
            {
            $username = trim($username); 
            $esta = DB::selectOne("SELECT count(*) as cant from SAAS_Usuarios where username = '" . $username . "'" .
                    " and saas_cliente in (select SAAS_Cliente from SAAS_Clientes where cliente = " . $cliente . ")");
            if ( $esta->cant > 0 )
                { 
                  if (!in_array($username,$estan_BD)) {
                    $estan_BD[] = $username; 
                    $error="BD"; 
                    }
                 }
            }
        }
        $enBD = new stdClass();
        $enBD = ''; 
        foreach ($estan_BD as $j => $BD)
        {
            if (empty($enBD))
            {
                $enBD = $BD; 
            }
            else
            {
                $enBD .= ', ' . $BD; 
            }
        }

        return json_encode([
            'error'=>$error,'BD'=>$enBD
         ]);

    }


    public static function saasCliente()
    {
        $cliente            = Session::get('usuario')->cliente['client_id'];
        $user_id            = Session::get('usuario')->user_id; 
        $saas_cliente = Request::input('saas_cliente'); 

        //$tab = (null != Request::input('tab')) ? Request::input('tab') : 'home';
        $tab = 'home';
      
        $params = array(
                    'SELECT',  // accion
                    $user_id,  
                    $saas_cliente,
                    $cliente);
        $clientes = SQLConnection::backendStoreProcedure('SAAS_Clientes_', $params, 'selectOne');

        $vista = view('/saas/saas_cliente')->with(compact('clientes','tab'))->render();
        return \Response::json(
                array(
                    'vista' => $vista,
                    'info'=>compact('clientes')
                ),
                200,
                [],
                JSON_NUMERIC_CHECK
            );
        return ; 

    }

  public static function saasHome() {

        $cliente      = Session::get('usuario')->cliente['client_id'];
        $user_id      = Session::get('usuario')->user_id; 
        $saas_cliente = Request::input('saas_cliente'); 

        $params = array(
                        'SELECT',  // accion
                        $user_id,  
                        $saas_cliente,
                        $cliente);
        $data_cliente = SQLConnection::backendStoreProcedure('SAAS_Clientes_', $params, 'selectOne');

        return view('/saas/saas_home')->with(compact('data_cliente'));
  }


  public static function saasUsuarios() {
        $cliente            = Session::get('usuario')->cliente['client_id'];
        $user_id            = Session::get('usuario')->user_id; 
        $saas_cliente = Request::input('saas_cliente'); 

        $params = array(
                        'selectall',  // accion
                        $user_id,  
                        0, // saas_usuario
                        $saas_cliente,
                        $cliente);
        $data_usuarios = SQLConnection::backendStoreProcedure('SAAS_Usuarios_', $params, 'select');

        return view('/saas/saas_usuarios')->with(compact('data_usuarios'));
  }

  public static function saasContratos() {
        $cliente            = Session::get('usuario')->cliente['client_id'];
        $user_id            = Session::get('usuario')->user_id; 
        $saas_cliente = Request::input('saas_cliente'); 

        $params = array(
                        'selectall',  // accion
                        $user_id,  
                        0, // saas_usuario
                        $saas_cliente,
                        $cliente);
        $data_contratos = SQLConnection::backendStoreProcedure('SAAS_Contratos_', $params, 'select');

        return view('/saas/saas_contratos')->with(compact('data_contratos'));
  }


    public static function saasContratosAgregarUsuario() {

        $cliente            = Session::get('usuario')->cliente['client_id'];
        $user_id            = Session::get('usuario')->user_id; 
        $saas_cliente       = Request::input('saas_cliente'); 
        $saas_contrato      = Request::input('saas_contrato'); 
        $params = array(
                        'usuarios_disponibles',  // accion
                        $user_id,  
                        0, // saas_usuario_contrato
                        $saas_cliente,
                        0, // saas_usuario
                        $saas_contrato);
                        
        $disponibles = SQLConnection::backendStoreProcedure('SAAS_Usuarios_Contratos_', $params, 'select');

        $params = array(
                'usuarios_asignados',  // accion
                $user_id,  
                0, // saas_usuario_contrato
                $saas_cliente,
                0, // saas_usuario
                $saas_contrato);
        $asignados = SQLConnection::backendStoreProcedure('SAAS_Usuarios_Contratos_', $params, 'select');

        //$vista =  view('/saas/saas_contratos_agregar_usuario')->with(compact(['saas_cliente', 'saas_contrato', 'disponibles', 'asignados']));
        $vista = view('/saas/saas_contratos_agregar_usuario')->with(compact('saas_cliente','saas_contrato','disponibles','asignados'))->render();

        return \Response::json(
                array(
                    'vista' => $vista
                ),
                200,
                [],
                JSON_NUMERIC_CHECK
            );
        return ; 

  }


  public static function saasContratosUsuariosMove() {
    $cliente        = Session::get('usuario')->cliente['client_id'];
    $user_id        = Session::get('usuario')->user_id; 
    $saas_cliente   = Request::input('saas_cliente'); 
    $saas_contrato  = Request::input('saas_contrato'); 
    $move           = Request::input('move');

    $disp = !empty(Request::input('disponibles')) ? Request::input('disponibles') : NULL;
    $asig = !empty(Request::input('asignados')) ? Request::input('asignados') : NULL;

    $usuarios = ($move == 'right') ? ( NULL !== $disp ? $disp : NULL ) : ( NULL !== $asig ? $asig : NULL );

    if (NULL !== $usuarios) {

      $ind = explode(",", $usuarios);

      foreach ($ind as $key => $saas_usuario) {
        if ($move == 'right') {
            $params = array(
                     'insert_usuario',  // accion
                     $user_id,  
                     0, // saas_usuario_contrato
                     $saas_cliente,
                     $saas_usuario, 
                     $saas_contrato);

            $temp = SQLConnection::backendStoreProcedure('SAAS_Usuarios_Contratos_', $params, 'selectOne');
        }
        else {
           $params = array(
                     'delete_usuario',  // accion
                     $user_id,  
                     0, // saas_usuario_contrato
                     $saas_cliente,
                     $saas_usuario, 
                     $saas_contrato);
            $temp = SQLConnection::backendStoreProcedure('SAAS_Usuarios_Contratos_', $params, 'selectOne');
        }
      }
    }

    $params = array(
                    'usuarios_disponibles',  // accion
                    $user_id,  
                    0, // saas_usuario_contrato
                    $saas_cliente,
                    0, // saas_usuario
                    $saas_contrato);
                    
    $disponibles = SQLConnection::backendStoreProcedure('SAAS_Usuarios_Contratos_', $params, 'select');

    $params = array(
            'usuarios_asignados',  // accion
            $user_id,  
            0, // saas_usuario_contrato
            $saas_cliente,
            0, // saas_usuario
            $saas_contrato);
    $asignados = SQLConnection::backendStoreProcedure('SAAS_Usuarios_Contratos_', $params, 'select');

    return json_encode( array($disponibles, $asignados) );

  }

   public static function saasContratosDelete() {
    $cliente        = Session::get('usuario')->cliente['client_id'];
    $user_id        = Session::get('usuario')->user_id; 
    $saas_cliente   = Request::input('saas_cliente'); 
    $saas_contrato  = Request::input('saas_contrato'); 
    $params = array(
                        'delete',  // accion
                        $user_id,  
                        $saas_contrato, 
                        $saas_cliente); 

    $data = SQLConnection::backendStoreProcedure('SAAS_Contratos_', $params, 'selectOne');
    return json_encode($data); 
   }
    


      

}
