<?php namespace App\Http\Controllers;

use App\Custom\SQLConnection;
use App\Custom\Misc;
use Request;
use Session;
use stdClass;
use App\Http\Controllers\AFIPController;
class ApiController extends Controller {

	public static $MainController;
	public static $ICNewController;
	private static $ic_new;
  	public function __construct(){
		if(!self::$MainController){
			self::$MainController = new MainController();
		}
		if (!self::$ICNewController){
			self::$ICNewController = new ICNewController();
		}
		self::$ic_new = Request::input('ic_new'); // VARIABLE DEFINIDA PARA SABER SI SE TIENE QUE GENERAR LA VERSION NUEVA DEL IC
  	}

	public static function obtenerBrief(){
		Self::obtenerSesion();
		$incluye_balance 	= Request::input('incluye_balance') ?? 0;
		$cliente_login 	= Request::input('cliente_login') ?? 0;
		
		if ( self::$ic_new == '1' ){
			return self::$ICNewController->obtenerBrief(true,'','','','','',$incluye_balance,$cliente_login);
		} else {
			return self::$MainController->obtenerBrief(true,'','','','','',$incluye_balance,$cliente_login);
		}
	}
	public static function obtenerSociedades(){
		if ( self::$ic_new == '1' ){
			return self::$ICNewController->obtenerSociedades(true);
		} else {
			return self::$MainController->obtenerSociedades(true);
		}
	}
	public static function obtenerFormales(){
		if ( self::$ic_new == '1' ){
			return self::$ICNewController->obtenerFormales(true);
		} else {
			return self::$MainController->obtenerFormales(true);
		}
	}
	public static function obtenerComerciales(){
		if ( self::$ic_new == '1' ){
			return self::$ICNewController->obtenerComerciales(true);
		} else {
			return self::$MainController->obtenerComerciales(true);
		}
	}
	public static function obtenerFiscales(){
        if ( self::$ic_new == '1' ){
            return self::$ICNewController->obtenerFiscales(true);
        } else {
		    return self::$MainController->obtenerFiscales(true);
        }
	}
	public static function obtenerBancos(){
		if ( self::$ic_new == '1' ){
			return self::$ICNewController->obtenerBancos(true);
		} else {
			return self::$MainController->obtenerBancos(true);	
		}
	}
	public static function obtenerContables(){
		if ( self::$ic_new == '1' ){
			return self::$ICNewController->obtenerContables(true);
		} else {
			return self::$MainController->obtenerContables(true);
		}
	}
	// obtener contables multiidioma
	public static function obtenerContablesMulti(){
		return self::$MainController->obtenerContablesMulti(true);
	}

	public static function obtenerLegales(){
		if ( self::$ic_new == '1' ){
			return self::$ICNewController->obtenerLegales(true);
		} else {
			return self::$MainController->obtenerLegales(true);
		}
	}
	public static function obtenerComex(){
		if ( self::$ic_new == '1' ){
			return self::$ICNewController->obtenerComex(true);
		} else {
			return self::$MainController->obtenerComex(true);
		}
	}
	public static function obtenerConstanciaPDF(){
		return self::$MainController->obtenerConstanciaPDF();
	}	
	public static function generarContenidoExportableHTML(){
	//	return self::$MainController->generarContenidoExportableHTML(true);
		$MaintenanceController = new MaintenanceController();
		return $MaintenanceController->generarContenidoExportableHTML();
	}
	#----------------- MODIFICACION NAHUEL
	public static function obtenerPrensa(){
		return self::$MainController->formPrensa();
	}
	#-----------------
	public static function obtenerHash(){
		$hash = Request::input('hash');
		echo Misc::HashGenerator($hash,16);
	}

	// funcion replicada desde ApiControllerV1 por nahuel
	public static function consumir_servicio($cuit,$producto=null,$id_externo=null){
		$p_ip    = $_SERVER['REMOTE_ADDR'];
		$p_url   = $_SERVER['REQUEST_URI'];
		$usuario = Session::get('usuario');
		$user_id = $usuario->user_id;
		if ($producto == NULL)
		{
			$producto = $usuario->producto;
		}
		$resp = SQLConnection::backendStoreProcedure('consumir_servicio_API',array($user_id,$cuit,$producto,$p_ip,$p_url,$id_externo),'selectOne');
		return $resp; 
	}


	public static function obtenerIC() {
        
        //C824D668799B10EE
        $info 				= Self::obtenerSesion();
        $cuit 				= $info['cuit'];
		$usuario    	= Session::get('usuario');
		
		// aca se consume el servicio
		self::consumir_servicio($cuit,$usuario->producto);

        if (ENV('SERVICIOS_AFIP') == true) {
            AFIPController::obtenerPadron($cuit);
        }
        $razon_social =	$info['razon_social'];
        $apikey 			=	$info['apikey'];
        if ($apikey=='C824D668799B10EE') {
          //$secciones = ['formales','comerciales'];
          $secciones = Request::input('secciones');
        }else{
          $secciones 		=	$info['secciones'];
        }
        $solo_brief = Request::input('solo_brief') ?? 0;
        if ($solo_brief == 1)
        {
        	$secciones = ['brief'];
        	$apikey = env('APIKEY_API_BRIEF');
        }
        $incluye_balance 	= Request::input('incluye_balance') ?? 0;
        $cliente_login 	= Request::input('cliente_login') ?? 0;
        $download 		= Request::input('download');
        if (isset($_POST['iv-new']) && $_POST['iv-new'] == 1){
            return View('iv/new/api-ic-new')->with(compact('cuit', 'razon_social', 'apikey', 'secciones', 'download', 'incluye_balance','cliente_login'))->render();
        } else{
            return 	View('Api/ic')->with(compact('cuit', 'razon_social', 'apikey', 'secciones', 'download', 'incluye_balance','cliente_login'))->render();
        }
    }

	private static function obtenerSesion(){
		$cuit = isset($_POST['cuit']) 	? $_POST['cuit'] : '';
        $apikey = isset($_POST['apikey']) ? $_POST['apikey'] : '';
        // $apikey = 'C824D668799B10EE';
        //si hay que tomar el usuario externo..
        $ext_user  	= isset($_POST['ext_user']) ? $_POST['ext_user'] 		: false;
        if(empty($cuit)){
            return  response()->json(array('error'=>'1','message' =>'Error: La CUIT no está seteada o es inválida'));
        }
        $razon_social 	= SQLConnection::obtenerRazonSocial($cuit)->nombre_persona;
        $usuario 				= Session::get('usuario');
        $user_id 				= $usuario->user_id;
        $client_id 			= $usuario->cliente['client_id'];
        
        $secciones 			= self::obtenerSeccionesHabilitadas($user_id,$apikey);
        $usuario->cliente[ENV('INFORME_API')] 						= new stdClass;
        $secciones = array_change_key_case($secciones, CASE_LOWER);
        $usuario->cliente[ENV('INFORME_API')]->secciones 	= $secciones;
        $usuario->cliente[ENV('INFORME_API')]->client_id 	= $client_id;
        if($ext_user){
        $user_id  	= isset($_POST['user_id']) ? $_POST['user_id'] 			: '';
        $usuario->user_id = $user_id;
        }
        Session::put('usuario',$usuario);
        Session::save();
        return ['cuit' => $cuit,'razon_social' => $razon_social,'apikey' => $apikey,'secciones' => $secciones];
    }

	private static function obtenerSeccionesHabilitadas($user_id,$apikey){
		//CHANCHADA
		if($user_id == '673762136' || $apikey == 'E6AF0CC45EB1D3CE' || $apikey == '3DCB184813DABA0E' || $apikey == 'E7D5CA667ECEDAC9' || $apikey == 'IFM340AAKHTM' || $apikey == 'IMPEC907545CR445'){
			$secciones_habilitadas 	= SQLConnection::obtenerSeccionesHabilitadasInforme($user_id,ENV('INFORME_API'));
		}else{
			$secciones_habilitadas 	= SQLConnection::obtenerSeccionesHabilitadasInforme($user_id,ENV('ID_INFORME_COMERCIAL'));
		}
		$secciones_habilitadas_ordenadas = [];
		foreach($secciones_habilitadas as $secciones){
			$secciones_habilitadas_ordenadas[$secciones->nombre_seccion] = $secciones; 
		}
		return $secciones_habilitadas_ordenadas;
	}

}
