<?php
namespace App\Http\Controllers;

use Request;
use Session;
use App\Custom\SQLConnection;
use App\Custom\Misc;
use DB;
use stdClass;
use DateTime;

class FeriadosController extends Controller
{
    public function feriadosPais(){ 
        $paises = SQLConnection::backendStoreProcedure('backend_obtener_paises',array(),'select'); 
        //
        $current_year = date('Y');
        $years = range($current_year+2,$current_year-15);
        //
        return view('/feriados-abm/feriados')->with(compact('paises','years'));
    }


    /**
     * En base al año obtenemos 
     * los meses y sus correspondientes
     * dias
     * @access public
     */
    public static function obtenerCalendario(){
        $year = Request::input('year');
        $pais = Request::input('pais');
        $fecha_feriado = null;
        // Store que me lista los feriados de un pais en especifico
        $feriadosPais = SQLConnection::backendStoreProcedure('LN_feriados',array('LIST_PAIS', $pais, $fecha_feriado, NULL, 0, $year));
        //
        foreach($feriadosPais as $k => $feriado){
            $feriado->fecha_feriado = new \DateTime($feriado->fecha_feriado);
            $feriado->fecha_feriado = $feriado->fecha_feriado->format('Y-m-d');
        } 
        //
        $mesesDelAño = [];
        //
        if ( !is_null($year) ){
            $meses = [];
            $mesesDelAno = [
                1 => 'Enero',
                2 => 'Febrero',
                3 => 'Marzo',
                4 => 'Abril',
                5 => 'Mayo',
                6 => 'Junio',
                7 => 'Julio',
                8 => 'Agosto',
                9 => 'Septiembre',
                10 => 'Octubre',
                11 => 'Noviembre',
                12 => 'Diciembre'
            ];            
            //
            for($i=1;$i <= 12;$i++){
                $meses[$i] = (object) ['dias' => cal_days_in_month(CAL_GREGORIAN,$i,$year),'primer_dia' => date('N', strtotime(date("Y-$i-01")))];
                if($i >12){
                    break;
                }
            }       
        }
        //
        return view ('/feriados-abm/calendario')->with(compact('meses', 'mesesDelAno', 'year', 'pais' , 'feriadosPais', 'fecha_feriado'));
    }

    // Funcion que agrega los feriados nuevos
     public static function altaNuevoFeriado(){
        $fecha_feriado = Request::input('fecha_feriado');
        $pais = Request::input('pais');
        $fecha_feriado = explode(',',$fecha_feriado);
        $year = Request::input('year');
        $fecha = null;
        $fechas_grabadas = SQLConnection::backendStoreProcedure('LN_feriados',array('LIST_YEAR_PAIS',$pais,NULL,NULL,1,$year));
        //
        $obj_date = new \DateTime();
        $str_date = null;
        $key_fecha_recibida = null;
        // Recorro el array de fecha y a cada fecha la inserto en la tabla
        foreach( $fechas_grabadas as $fecha_grabada ){
            $obj_date = $obj_date->createFromFormat('Y-m-d H:i:s',$fecha_grabada->fecha_feriado);
            $str_date = $obj_date->format('Y-m-d');
            $key_fecha_recibida = array_search($str_date,$fecha_feriado);
            if (  $key_fecha_recibida !== false ){
                // Si no esta activo lo activamos
                if ( !$fecha_grabada->activo ){
                    // Lo activa
                    SQLConnection::backendStoreProcedure('LN_feriados', array('UPD_ESTADO', $pais, $fecha_grabada->fecha_feriado, Session::get('usuario')->user_id,1));
                }
                //
                unset($fecha_feriado[$key_fecha_recibida]); // eliminamos el elemento del arreglo recibido
            } else {
                // Desactivas
                SQLConnection::backendStoreProcedure('LN_feriados', array('UPD_ESTADO', $pais, $fecha_grabada->fecha_feriado, Session::get('usuario')->user_id,0));
            }
        }
        //
        if ( !empty($fecha_feriado) ){
            // Agregar todas las fechas que tiene al store
            $newFormat = new \DateTime();
            $strFromat = null;
            foreach( $fecha_feriado as $fecha ){
                $newFormat = $newFormat->createFromFormat('Y-m-d',$fecha);
                $strFromat = $newFormat->format('Y-m-d H:i:s');
                SQLConnection::backendStoreProcedure('LN_feriados', array('AGREGAR', $pais, $strFromat, Session::get('usuario')->user_id, 1, NULL )); 
            }
        }
        // 
        $devolverCal = self::obtenerCalendario();                           
        return $devolverCal; 
    }    
}

