<?php

namespace Daite\Coopdigital\Http\Controllers;

use App\Http\Controllers\Controller;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Config;

// * Base de datos
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;

class ControladorConsultas extends Controller {

    // Función para ejecutar consultas en la base de datos
    public function consulta(Request $request) {
        Log::info("CONSULTA");
        // Declaración de variables
        $consulta = $request -> consulta;
        $idUsuario = $request->is('api/*') ? '' : session()->get('usuarioIniciado')['id'];
        $tipoConsulta = $request -> tipoConsulta;
        $registrosBaseDatos = null;

        $consulta = str_replace('{idUsuario}', $idUsuario, $consulta);
        $consulta = str_replace('{filtroFechaDesde}', date('Ymd', strtotime('-1 year')), $consulta);
        $consulta = str_replace('{filtroFechaHasta}', date('Ymd'), $consulta);

        // Tipo de consulta a ejecutar
        if ($tipoConsulta == 'select') {

            $registrosBaseDatos = DB::select($consulta);

        } else {

            DB::unprepared($consulta);

        }

        return $registrosBaseDatos;

    }

    // Función para ejecutar consultas en la base de datos
    public function consulta2(Request $request) {

        // Declaración de variables
        $consulta = $request -> consulta;
        $idUsuario = session()->get('usuarioIniciado')['id'];
        $tipoConsulta = $request -> tipoConsulta;
        $registrosBaseDatos = null;

        $consulta = str_replace('{idUsuario}', $idUsuario, $consulta);
        $consulta = str_replace('{filtroFechaDesde}', date('Ymd', strtotime('-1 year')), $consulta);
        $consulta = str_replace('{filtroFechaHasta}', date('Ymd'), $consulta);

        // Tipo de consulta a ejecutar
        if ($tipoConsulta == 'select') {

            $registrosBaseDatos = DB::select($consulta);

        } else {

            DB::unprepared($consulta);

        }

        return $registrosBaseDatos;

    }

    public function traerConexiones() {
        return Config::get('database.connections');
    }

    public function traerFiltrosVariablesFinancieras() {

        $rangoFechas = DB::select(
            "EXEC [AppMovil].[p_traer_filtros_registros] ?, ?;", [
                '', 'RANGOFECHAS'
        ]);

        $sucursales = DB::select(
            "EXEC [AppMovil].[p_traer_filtros_registros] ?, ?;", [
                '', 'SUCURSALES'
        ]);

        $clases = DB::select(
            "EXEC [AppMovil].[p_traer_filtros_registros] ?, ?;", [
                '', 'CLASES'
        ]);

        $cobradores = DB::select("EXEC [AppMovil].[p_traer_filtros_registros] ?, ?;", [
            '', 'COBRADORES'
        ]);

        $oficiales = DB::select(
            "EXEC [AppMovil].[p_traer_filtros_registros] ?, ?;", [
                '', 'OFICIALES'
        ]);

        $supervisores = DB::select(
            "EXEC [AppMovil].[p_traer_filtros_registros] ?, ?;", [
                '', 'SUPERVISORES'
        ]);

        $vendedores = DB::select(
            "EXEC [AppMovil].[p_traer_filtros_registros] ?, ?;", [
                '', 'VENDEDORES'
        ]);

        $salidas = DB::select(
            "EXEC [AppMovil].[p_traer_filtros_registros] ?, ?;", [
                '', 'SALIDA_RESUMEN_VENTAS'
        ]);

        return response()->json([
            'rango_fechas' => $rangoFechas,
            'sucursales' => $sucursales,
            'clases' => $clases,
            'cobradores' => $cobradores,
            'oficiales' => $oficiales,
            'supervisores' => $supervisores,
            'vendedores' => $vendedores,
            'salidas' => $salidas,
        ]);

    }

    public function traerVariablesFinancierasPrestamos(Request $request) {

        $now = Carbon::now();
        $ano = $request->get('ano') ?? $now->format('Y');
        $mes = $request->get('mes') ?? $now->format('m');
        $sucursal = $request->get('sucursal') ?? '';
        $clase = $request->get('clase_prestamo') ?? '';
        $cobrador = $request->get('cobrador') ?? '';
        $oficial = $request->get('oficial_prestamo') ?? '';
        $salidaMora = $request->get('salida_con_mora') ?? '0';

        $incluirIngresosLegales = $request->get('incluir_ingresos_legales') ??
        '0';

        $supervisor = $request->get('supervisor') ?? '';
        $clasesOmitir = $request->get('clases_omitir') ?? '';
        $omitirCobrador = $request->get('omitir_cobrador') ?? '0';
        $incluirSeguros = $request->get('incluir_seguros') ?? '0';
        $incluirComision = $request->get('incluir_comision') ?? '0';

        $variablesFinancieras = DB::select(
            "SET NOCOUNT ON; EXEC [AppMovil].[p_traer_variables_financiera] ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?;", [
                $ano,
                $mes,
                $sucursal,
                $clase,
                $cobrador,
                $oficial,
                $salidaMora,
                $incluirIngresosLegales,
                '',
                $supervisor,
                $clasesOmitir,
                $omitirCobrador,
                $incluirSeguros,
                $incluirComision,
                1
        ]);

        return response()->json($variablesFinancieras);

    }

}
