<?php namespace App\Http\Controllers;
use App\Custom\SQLConnection;
use App\Custom\Misc;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Request;
use Illuminate\Support\Facades\Response;

class DashboardController extends Controller {
    public static function datosDashboard(){
        //EXEC IV_backend_dashboard BACKIVDASH. '47'
        $indicadores_tareas = SQLConnection::backendStoreProcedure('IV_backend_dashboard',array('BACKIVDASH',Session::get('webdata')['servicio_contratado']),'selectOne');
        return $indicadores_tareas;
    }

    /**
     * Metodo que devuelve los datos
     * de los graficos de los informes
     */
    public function obtenerDatosGraficosInformes(){
        $fecha_hoy = new \DateTime();
        //
        // Los informes se categorizan por semanas
        $data_semanas = SQLConnection::backendStoreProcedure('Dashboard_backend_informes_tareas',array('INFORMES_POR_SEMANA',$fecha_hoy->format('Y-m-d'),env('PLATAFORMA')));
        $data_dias = SQLConnection::backendStoreProcedure('Dashboard_backend_informes_tareas',array('INFORMES_POR_DIA',$fecha_hoy->format('Y-m-d'),env('PLATAFORMA')));
        $data = array_merge($data_semanas,$data_dias);
        //
        $vencidos_semanas = SQLConnection::backendStoreProcedure('Dashboard_backend_informes_tareas',array('INFORMES_VENCIDOS_PREFECHA',$fecha_hoy->format('Y-m-d'),env('PLATAFORMA')));
        $vencidos_dia = SQLConnection::backendStoreProcedure('Dashboard_backend_informes_tareas',array('INFORMES_VENCIDOS_PREDIA',$fecha_hoy->format('Y-m-d'),env('PLATAFORMA')));
        $vencidos = array_merge($vencidos_semanas,$vencidos_dia);
        //
        $data_adaptada = $this->procesarDatosGraficosInformes($data,$vencidos);
        //
        return Response::JSON($data_adaptada);
    }
    
    public function obtenerDatosGraficosTareas(){
        $fecha_hoy = new \DateTime();
        //$fecha_hoy->sub((new \DateInterval('P1W')));
        // Las tareas se categorizan por dias
        //
        $data = SQLConnection::backendStoreProcedure('Dashboard_backend_informes_tareas',array('TAREAS_POR_DIA',$fecha_hoy->format('Y-m-d'),env('PLATAFORMA')));
        $vencidos = SQLConnection::backendStoreProcedure('Dashboard_backend_informes_tareas',array('TAREAS_VENCIDOS_PREDIA',$fecha_hoy->format('Y-m-d'),env('PLATAFORMA')));
        //
        $data_adaptada = $this->procesarDatosGraficosTareas($data,$vencidos);
        //
        return Response::JSON($data_adaptada);
    }

    /**
     * Devuelve los datos del grafico
     * de tareas por categoria
     */
    public function obtenerDatosGraficosTareasCategoria(){
        $fecha_hoy = new \DateTime();
        //
        $data = SQLConnection::backendStoreProcedure('Dashboard_backend_informes_tareas',array('TAREAS_CATEGORIA_DIA',$fecha_hoy->format('Y-m-d'),env('PLATAFORMA')));
        $vencidos = SQLConnection::backendStoreProcedure('Dashboard_backend_informes_tareas',array('TAREAS_CATEGORIA_PREDIA',$fecha_hoy->format('Y-m-d'),env('PLATAFORMA')));
        //
        $data_adaptada = $this->procesarDatosGraficosTareasCategoria($data,$vencidos);
        //
        return Response::JSON($data_adaptada);
    }

    /**
     * Procesar y adaptar los datos de los graficos
     * de los informes para que sean interpretados
     * por el front
     * @access private
     * @param array datos de segun fecha comprometida de informes vigentes
     * @param array datos de segun fecha comprometida de informes vencidos
     * @return array
     */
    private function procesarDatosGraficosInformes($data,$vencidos){
        $en_proceso = [];
        $en_gestion = [];
        $en_espera = [];
        $no_calificado = [];
        //
        $en_proceso[] = (object) ['y' => 0,'name' => 'Vencidos','color' => '#FF0000','id' => 'N'];
        $en_gestion[] = (object) ['y' => 0,'name' => 'Vencidos','color' => '#FF0000','id' => 'N'];
        $en_espera[] = (object) ['y' => 0,'name' => 'Vencidos','color' => '#FF0000','id' => 'N'];
        $no_calificado[] = (object) ['y' => 0,'name' => 'Vencidos','color' => '#FF0000','id' => 'N'];
        // informes con fecha comprometida vencida
        foreach( $vencidos as $v ){
            if ( $v->estado == 'E' ){
                $en_proceso[0]->y = intval($v->cant_informes);
            } elseif ( $v->estado == 'P' ){
                $en_gestion[0]->y = intval($v->cant_informes);
            } elseif ( $v->estado == 'W' ){
                $en_espera[0]->y = intval($v->cant_informes);
            } elseif ( $v->estado == 'A' ){
                $no_calificado[0]->y = intval($v->cant_informes);
            }
        }
        // informes con fecha comprometida vencida
        $fecha = NULL;
        foreach( $data as $d ){
            $fecha = date_create($d->fecha_semana);
            if ( $d->estado == 'E' ){
                $en_proceso[] = (object) ['y' => intval($d->cant_informes), 'name' => $fecha->format('m-d'),'id' => $fecha->format('Y-m-d')];
            } elseif ( $d->estado == 'P' ){
                $en_gestion[] = (object) ['y' => intval($d->cant_informes), 'name' => $fecha->format('m-d'),'id' => $fecha->format('Y-m-d')];
            } elseif ( $d->estado == 'W' ){
                $en_espera[] = (object) ['y' => intval($d->cant_informes), 'name' => $fecha->format('m-d'),'id' => $fecha->format('Y-m-d')];
            } elseif ( $d->estado == 'A' ){
                $no_calificado[] = (object) ['y' => intval($d->cant_informes), 'name' => $fecha->format('m-d'),'id' => $fecha->format('Y-m-d')];
            }
        }
        //
        $en_proceso[1]->color = 'yellow';
        $en_espera[1]->color = 'yellow';
        $no_calificado[1]->color = 'yellow';
        //
        return ['en_proceso' => $en_proceso,'en_gestion' => $en_gestion,'en_espera' => $en_espera,'no_calificado' => $no_calificado];
    }

    /**
     * Procesar y adaptar los datos de los graficos
     * de los tareas para que sean interpretados
     * por el front
     * @access private
     * @param array datos de segun fecha comprometida de tareas vigentes
     * @param array datos de segun fecha comprometida de tareas vencidos
     * @return array
     */
    private function procesarDatosGraficosTareas($data,$vencidos){
        $en_proceso = [];
        $en_espera = [];
        $lista_para_iniciar = [];
        //
        $en_proceso[] = (object) ['y' => 0,'name' => 'Vencidos','color' => '#FF0000','id' => 'N'];
        $en_espera[] = (object) ['y' => 0,'name' => 'Vencidos','color' => '#FF0000','id' => 'N'];
        $lista_para_iniciar[] = (object) ['y' => 0,'name' => 'Vencidos','color' => '#FF0000','id' => 'N'];
        // informes con fecha comprometida vencida
        foreach( $vencidos as $v ){
            if ( $v->estado == 'E' ){
                $en_proceso[0]->y = intval($v->cant_informes);
            } elseif ( $v->estado == 'W' ){
                $en_espera[0]->y = intval($v->cant_informes);
            } elseif ( $v->estado == 'Z' ){
                $lista_para_iniciar[0]->y = intval($v->cant_informes);
            }
        }
        // informes con fecha comprometida vencida
        $fecha = NULL;
        foreach( $data as $d ){
            $fecha = date_create($d->fecha_semana);
            if ( $d->estado == 'E' ){
                $en_proceso[] = (object) ['y' => intval($d->cant_informes), 'name' => $fecha->format('m-d'),'id' => $fecha->format('Y-m-d')];
            } elseif ( $d->estado == 'W' ){
                $en_espera[] = (object) ['y' => intval($d->cant_informes), 'name' => $fecha->format('m-d'),'id' => $fecha->format('Y-m-d')];
            } elseif ( $d->estado == 'Z' ){
                $lista_para_iniciar[] = (object) ['y' => intval($d->cant_informes), 'name' => $fecha->format('m-d'),'id' => $fecha->format('Y-m-d')];
            }
        }
        // las tareas estan ordenadas por dia , el primer dia tendra color amarillo
        $en_proceso[1]->color = 'yellow';
        $en_espera[1]->color = 'yellow';
        $lista_para_iniciar[1]->color = 'yellow';
        //
        return ['en_proceso' => $en_proceso,'en_espera' => $en_espera,'lista_para_iniciar' => $lista_para_iniciar];
    }

    /**
     * Procesar y adaptar los datos de los graficos
     * de los tareas categorias para que sean interpretados
     * por el front
     * @access private
     * @param array datos de segun fecha comprometida de tareas vigentes
     * @param array datos de segun fecha comprometida de tareas vencidos
     * @return array
     */
    private function procesarDatosGraficosTareasCategoria($data,$vencidos){
        $call_center = [];
        $redaccion = [];
        $control = [];
        //
        $call_center[] = (object) ['y' => 0,'name' => 'Vencidos','id' => 'N'];
        $redaccion[] = (object) ['y' => 0,'name' => 'Vencidos','id' => 'N'];
        $control[] = (object) ['y' => 0,'name' => 'Vencidos','id' => 'N'];
        // tareas con fecha comprometida vencida
        foreach( $vencidos as $v ){
            if ( $v->estado == 'C' ){
                $call_center[0]->y = intval($v->cant_informes);
            } elseif ( $v->estado == 'R' ){
                $redaccion[0]->y = intval($v->cant_informes);
            } elseif ( $v->estado == 'O' ){
                $control[0]->y = intval($v->cant_informes);
            }
        }
        // tareas con fecha comprometida
        $fecha = NULL;
        foreach( $data as $d ){
            $fecha = date_create($d->fecha_semana);
            if ( $d->estado == 'C' ){
                $call_center[] = (object) ['y' => intval($d->cant_informes), 'name' => $fecha->format('m-d'),'id' => $fecha->format('Y-m-d')];
            } elseif ( $d->estado == 'R' ){
                $redaccion[] = (object) ['y' => intval($d->cant_informes), 'name' => $fecha->format('m-d'),'id' => $fecha->format('Y-m-d')];
            } elseif ( $d->estado == 'O' ){
                $control[] = (object) ['y' => intval($d->cant_informes), 'name' => $fecha->format('m-d'),'id' => $fecha->format('Y-m-d')];
            }
        }
        //
        return ['call_center' => $call_center,'redaccion' => $redaccion,'control' => $control];
    }
}