<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Request;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Response;

use App\Custom\Misc;
use App\Custom\SQLConnection;

use App\Http\Controllers\MainController;
use App\Http\Controllers\ICNewController;
use App\Http\Controllers\MaintenanceController;

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 obtenerIC()
    {
        //
        $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();
        }
    }

    public static function obtenerBrief()
    {
        self::obtenerSesion();
        $incluye_balance = Request::input('incluye_balance') ?? 0;
        $cliente_login = Request::input('cliente_login') ?? 0;
        //dd(self::$ic_new);
        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 obtenerContables()
    {
        if (self::$ic_new == '1') {
            return self::$ICNewController->obtenerContables(true);
        } else {
            return self::$MainController->obtenerContables(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 obtenerBancos()
    {
        if (self::$ic_new == '1') {
            return self::$ICNewController->obtenerBancos(true);
        } else {
            return self::$MainController->obtenerBancos(true);
        }
    }

    #----------------- MODIFICACION NAHUEL
    public static function obtenerPrensa()
    {
        return self::$MainController->formPrensa();
    }
    #-----------------

    public static function generarContenidoExportableHTML()
    {
        //	return self::$MainController->generarContenidoExportableHTML(true);
        $MaintenanceController = new MaintenanceController();
        return $MaintenanceController->generarContenidoExportableHTML();
    }

    // obtener contables multiidioma
    public static function obtenerContablesMulti()
    {
        return self::$MainController->obtenerContablesMulti(true);
    }

    public static function obtenerHash()
    {
        $hash = Request::input('hash');
        echo Misc::HashGenerator($hash, 16);
    }

    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];
    }

    // 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;
    }

    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;
    }
}
