<?php
namespace App\Http\Controllers;

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

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

class RectificacionesController extends Controller {
    // -------------------------
    // Función que devuelve la vista

    public static function index(){
        return view("/rectificaciones/rectificaciones");
    }
    // -------------------------
    // Función que recibe un archivo txt por post y lo 
    // almacena en COMPARTIDO. Para luego recorrerlo y 
    // obtener información necesaria. Si no es un archivo 
    // txt se almacena ip en lista negra
    
    static function carga_archivo(){
        $txtReg = "/.txt$/";
        $codIdReg = "/^([0-9]{5})$/";
        $fechaReg = "/^((19|20|21)[0-9]{2}(0|1)[0-9])$/";
        $tipoAndSituacionIdReg = "/^[0-9 ]{2}$/";
        $numIdReg = "/^[0-9]{11}$/";
        //$denReg_DIEGO ="/^[A-Z ]+$/";
        $denReg ="/^[A-z0-9#&%\?\.\/�\,\-\'\(\)\"\| ]+$/";
        $montoReg = "/^([0-9\, ]{12})$/";
        // --------------
        // Aca valida si el archivo ES un .txt
        if(Misc::validar_data($txtReg, $_FILES['userText']['name'])){
            // --------------
            // Captura el nombre del archivo. Si la variable del nombre está vacía se hardcodea un nombre para que pueda procesar (sucedió con archivos grandes)
            $upload = ($_FILES['userText']['tmp_name']);
            if ($upload == ""){
                $upload = "errorName.txt";
            }
            $lineas = file($upload);
            $html = "";
            $userId = Session::get('usuario')->user_id;
            //$contador = 0;
            //$ok = 0;
            //$mal = 0;
            // ---------------
            // Aquí parsea y valida cada dato, si son correctos se mandan a la base de datos y se devuelve un mensaje de Carga Correcta de Datos, si no envía un mensaje de Error de Carga de Datos.
            foreach($lineas as $valor) {
                $denReg_modif = substr($valor, 24, 55);
                if (mb_check_encoding($denReg_modif)) {
                }
                else {
                    $denReg_modif = " ";
                }
                if (Misc::validar_data($codIdReg, substr($valor, 0, 5)) and Misc::validar_data($fechaReg, substr($valor, 5, 6)) and Misc::validar_data($tipoAndSituacionIdReg, substr($valor, 11, 2)) and Misc::validar_data($numIdReg, substr($valor, 13, 11)) and Misc::validar_data($denReg, $denReg_modif) and Misc::validar_data($tipoAndSituacionIdReg, substr($valor, 79, 2)) and Misc::validar_data($montoReg, substr($valor, 81, 12))){
                    $apps = SQLConnection::backendStoreProcedure('BCRA_rectificaciones', array('INSERTAR',substr($valor, 0, 5),substr($valor, 5, 6),substr($valor, 11, 2),substr($valor, 13, 11),$denReg_modif,substr($valor, 79, 2),intval(substr($valor, 81, 12)),$userId));
                    //$ok++;
                    $html = "Se cargó con éxito";
                }else{
                    $html = "Se produjo un error en la carga de datos...";
                    //$mal++;
                    //echo(var_dump(array("codId"=>substr($valor, 0, 5), "fecha"=>substr($valor, 5, 6), "tipoSit"=>substr($valor, 11, 2), "numId"=>substr($valor, 13, 11), "denReg"=>substr($valor, 24, 55), "tipoSitId"=>substr($valor, 79, 2), "monto"=>substr($valor, 81, 12))));die();
                }
            }    
            //echo("CANTIDAD DE LINEAS: " . $contador . "\n");
            //echo("\nREGISTROS CORRECTOS: " . $ok . "\n");
            //echo("\nREGISTROS ERRONEOS: " . $mal);
            //die();        
            // ---------------
            return view("rectificaciones/rectificaciones_carga", compact("html"));
        }
        // Aca si el archivo enviado no es un .txt (quiere decir que salteó todas las instancias de validación desde el front)
        else {
            $servidor = $_SERVER['REMOTE_ADDR'];
            $seccion = "RectificacionesController";
            $nombre_de_funcion = "cargar_archivo";
            $mensaje = "Alguien infiltró el javascript y esta es su ip: ".$servidor;
            SQLConnection::control_erores($seccion,$nombre_de_funcion,$mensaje);
        }
    }
}