<?php

namespace CmBundle\Controller;

use CmBundle\Entity\CatalogoRepositorio;
use CmBundle\Entity\MesaServicios;
use CmBundle\Entity\MesaServiciosArchivos;
use CmBundle\Entity\MesaServiciosSeguimiento;
use CmBundle\Entity\RepositorioArchivos;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

date_default_timezone_set('America/Mexico_City');

class MesaServiciosController extends Controller
{
    public function homeMesaServiciosAction(Request $request)
    {
        $session = $request->getSession();
        if ($session->has('idEmpleado')) {
            if ($request->getMethod() == 'POST') {

                $em = $this->getDoctrine()->getEntityManager();

                $idePla = $request->get('cvePla');
                $area = $request->get('cveArea');
                $prioridad = $request->get('cveCatSem');
                $asunto = $request->get('asunto');
                $archivos = $request->get('adjuntar');

                $plantel = $em->getRepository('CmBundle:Planteles')
                    ->findOneBy(['idePla' => $idePla]);
                $semaforo = $em->getRepository('CmBundle:CatalogoSemaforos')
                    ->findOneBy(['ideCatSem' => $prioridad]);
                $empleado = $em->getRepository('CmBundle:Empleados')
                    ->findOneBy(['identificador' => $session->get("identificador")]);
                $area = $em->getRepository('CmBundle:CatalogoAreas')
                    ->findOneBy(['ideCatArea' => $area]);

                $mesaServicio = new MesaServicios();
                $mesaServicio->setCvePla($plantel);
                $mesaServicio->setCveEmp($empleado);
                $mesaServicio->setCveCatArea($area);
                $mesaServicio->setTema($asunto);
                $mesaServicio->setEstatus(1);
                $mesaServicio->setCveSemaforo($semaforo);
                if ($request->get('fecCompromiso') == "") {
                    $mesaServicio->setFecCompromiso(null);
                } else {
                    $mesaServicio->setFecCompromiso(new \DateTime(date($request->get('fecCompromiso'))));
                }
                $mesaServicio->setBanderaCompromiso(0);
                $mesaServicio->setFecCierre(null);
                $mesaServicio->setHorCierre(null);
                $mesaServicio->setFecMov(new \DateTime(date('Y-m-d')));
                $mesaServicio->setHorMov(new \DateTime(date('H:i:s')));

                $em->persist($mesaServicio);
                $em->flush();

                for ($i = 1; $i <= $archivos; $i++) {
                    if ($_FILES['archivo_' . $i]['error'] > 0) {
                        print_r("<br>XD: " . $i);
                    } else {
                        //print_r("<br>" . $_FILES['archivo_' . $i]['name']);
                        $RUTA_ARCHIVO = "MS/" . $empleado->getIdeEmp();
                        if (file_exists($RUTA_ARCHIVO) == false) {
                            mkdir($RUTA_ARCHIVO); // creamos la carpeta del EMPLEADO
                        }
                        $RUTA_ARCHIVO = $RUTA_ARCHIVO . "/" . $plantel->getIdePla();
                        if (file_exists($RUTA_ARCHIVO) == false) {
                            mkdir($RUTA_ARCHIVO); // creamos la carpeta del PLANTEL
                        }
                        $RUTA_ARCHIVO = $RUTA_ARCHIVO . "/" . $mesaServicio->getIdeMesSer();
                        if (file_exists($RUTA_ARCHIVO) == false) {
                            mkdir($RUTA_ARCHIVO); // creamos la carpeta de la MESA DE SERVICIO
                        }

                        $RUTA_ARCHIVO = $RUTA_ARCHIVO . "/" . $_FILES['archivo_' . $i]['name'];
                        move_uploaded_file($_FILES['archivo_' . $i]['tmp_name'], $RUTA_ARCHIVO);

                        $msArchivo = new MesaServiciosArchivos();
                        $msArchivo->setRutaArchivo($RUTA_ARCHIVO);
                        $msArchivo->setCveMesSer($mesaServicio);
                        $msArchivo->setCveMesSerSeg(null);
                        $msArchivo->setCveEmp($empleado);

                        $em->persist($msArchivo);
                        $em->flush();
                    }
                }

                return $this->redirect($this->generateUrl('mesa_servicios'));

            } else { // ES GET
                $em = $this->getDoctrine()->getEntityManager();
                $escuelas = [];
                if ($session->get('rol') == 2) {
                    $escuelas = $em->getRepository('CmBundle:Planteles')
                        ->findBy(['idePla' => 1]);
                } else {
                    $escuelas = $em->getRepository('CmBundle:Planteles')
                        ->findBy([], ['nomenclatura' => 'ASC']);
                }

                $semaforos = $em->getRepository('CmBundle:CatalogoSemaforos')
                    ->findBy([], ['valor' => 'ASC']);

                $areas = $em->getRepository('CmBundle:CatalogoAreas')
                    ->findAll();

                $empleado = $em->getRepository('CmBundle:Empleados')
                    ->findOneBy(['identificador' => $session->get("identificador")]);

                $mesasServicio = $em->getRepository('CmBundle:MesaServicios')
                    ->findBy(['cveEmp' => $empleado]);
                $auxPlantel = $em->getRepository('CmBundle:Planteles')
                    ->findOneBy(['cvePla' => $session->get('plantel')]);

                if ($session->get('rol') == 2) {
                    $dql = "SELECT ms "
                        . "FROM "
                        . "CmBundle:MesaServicios ms "
                        . "WHERE "
                        . "ms.cvePla = " . $auxPlantel->getIdePla()
                        . "OR "
                        . "ms.cveEmp = " . $empleado->getIdeEmp();
                } else {
                    $dql = "SELECT ms "
                        . "FROM "
                        . "CmBundle:MesaServicios ms "
                        . "WHERE "
                        . "ms.cveEmp = " . $empleado->getIdeEmp() . " "
                        . "OR "
                        . "ms.cveCatArea = " . $session->get('rol') . " "
                        . "OR "
                        . "ms.cvePla = " . $auxPlantel->getIdePla();
                }

                $query = $em->createQuery($dql);
                $mesasServicio = $query->getResult();


                return $this->render('CmBundle:MesaServicios:home_mesa_servicios.html.twig',
                    [
                        'escuelas' => $escuelas,
                        'semaforos' => $semaforos,
                        'areas' => $areas,
                        'mesasServicio' => $mesasServicio
                    ]
                );
            }
        } else {
            return $this->redirect($this->generateUrl('logout'));
        }

    }

    public function mesaServiciosRespuestasAction(Request $request)
    {
        $session = $request->getSession();
        if ($session->has('idEmpleado')) {
            if ($request->getMethod() == 'POST') {

                $em = $this->getDoctrine()->getEntityManager();

                $ideMesSer = $request->get('ideMesSer');
                $respuesta = $request->get('respuestaMS');

                $cveMesSer = $em->getRepository('CmBundle:MesaServicios')
                    ->findOneBy(['ideMesSer' => $ideMesSer]);
                $empleado = $em->getRepository('CmBundle:Empleados')
                    ->findOneBy(['identificador' => $session->get("identificador")]);

                $resMS = new MesaServiciosSeguimiento();
                $resMS->setCveMesSer($cveMesSer);
                $resMS->setCveEmp($empleado);
                $resMS->setRespuesta(trim($respuesta));
                $resMS->setVisto(0);
                $resMS->setFecVisto(null);
                $resMS->setFecMov(new \DateTime(date('Y-m-d')));
                $resMS->setHorMov(new \DateTime(date('H:i:s')));

                $em->persist($resMS);
                $em->flush();

                if ($_FILES['fileRMS']['error'] > 0) {
                    //print_r("<br>No se mandaron archivos");
                } else {
                    $RUTA_ARCHIVO = "MS/" . $empleado->getIdeEmp();
                    if (file_exists($RUTA_ARCHIVO) == false) {
                        mkdir($RUTA_ARCHIVO); // creamos la carpeta del EMPLEADO
                    }
                    $RUTA_ARCHIVO = $RUTA_ARCHIVO . "/" . $cveMesSer->getCvePla()->getIdePla();
                    if (file_exists($RUTA_ARCHIVO) == false) {
                        mkdir($RUTA_ARCHIVO); // creamos la carpeta del PLANTEL
                    }
                    $RUTA_ARCHIVO = $RUTA_ARCHIVO . "/" . $cveMesSer->getIdeMesSer();
                    if (file_exists($RUTA_ARCHIVO) == false) {
                        mkdir($RUTA_ARCHIVO); // creamos la carpeta de la MESA DE SERVICIO
                    }
                    $RUTA_ARCHIVO = $RUTA_ARCHIVO . "/" . $resMS->getIdeMesSerSeg();
                    if (file_exists($RUTA_ARCHIVO) == false) {
                        mkdir($RUTA_ARCHIVO); // creamos la carpeta de la MESA DE SERVICIO SEGUIMIENTO
                    }

                    $RUTA_ARCHIVO = $RUTA_ARCHIVO . "/" . $_FILES['fileRMS']['name'];
                    move_uploaded_file($_FILES['fileRMS']['tmp_name'], $RUTA_ARCHIVO);

                    $rmsArchivo = new MesaServiciosArchivos();
                    $rmsArchivo->setRutaArchivo($RUTA_ARCHIVO);
                    $rmsArchivo->setCveMesSer(null);
                    $rmsArchivo->setCveMesSerSeg($resMS);
                    $rmsArchivo->setCveEmp($empleado);

                    $em->persist($rmsArchivo);
                    $em->flush();
                }

                $mesaServicio = $em->getRepository('CmBundle:MesaServicios')
                    ->findOneBy(['ideMesSer' => $ideMesSer]);
                $mesSerRespuestas = $em->getRepository('CmBundle:MesaServiciosSeguimiento')
                    ->findBy(['cveMesSer' => $mesaServicio]);
                $msArchivos = $em->getRepository('CmBundle:MesaServiciosArchivos')
                    ->findBy(['cveMesSer' => $mesaServicio]);
                $auxMSRespuestas = [];
                foreach ($mesSerRespuestas as $res) {
                    $auxMSArchivos = $em->getRepository('CmBundle:MesaServiciosArchivos')
                        ->findBy(['cveMesSerSeg' => $res]);
                    $auxMSRespuestas[] = [$res, $auxMSArchivos];
                }

                return $this->render('CmBundle:MesaServicios:tabla_lista_respuestas_ms.html.twig',
                    [
                        'ms' => $mesaServicio,
                        'respuestas' => $auxMSRespuestas,
                        'archivos' => $msArchivos
                    ]
                );

            } else { // ES GET
                $em = $this->getDoctrine()->getEntityManager();

                $ideMesSer = $request->get('ideMesSer');

                $empleado = $em->getRepository('CmBundle:Empleados')
                    ->findOneBy(['identificador' => $session->get("identificador")]);

                $mesaServicio = $em->getRepository('CmBundle:MesaServicios')
                    ->findOneBy(['ideMesSer' => $ideMesSer]);
                $mesSerRespuestas = $em->getRepository('CmBundle:MesaServiciosSeguimiento')
                    ->findBy(['cveMesSer' => $mesaServicio]);
                $msArchivos = $em->getRepository('CmBundle:MesaServiciosArchivos')
                    ->findBy(['cveMesSer' => $mesaServicio]);

                $auxMSRespuestas = [];
                foreach ($mesSerRespuestas as $res) {
                    $auxMSArchivos = $em->getRepository('CmBundle:MesaServiciosArchivos')
                        ->findBy(['cveMesSerSeg' => $res]);
                    $auxMSRespuestas[] = [$res, $auxMSArchivos];
                }

                return $this->render('CmBundle:MesaServicios:tabla_respuestas_mesa_servicios.html.twig',
                    [
                        'ms' => $mesaServicio,
                        'respuestas' => $auxMSRespuestas,
                        'archivos' => $msArchivos
                    ]
                );
            }
        } else {
            return $this->redirect($this->generateUrl('logout'));
        }

    }

    public function mesaServiciosVistoAction(Request $request)
    {
        $session = $request->getSession();
        if ($session->has('idEmpleado')) {
            if ($request->getMethod() == 'POST') {

                $em = $this->getDoctrine()->getEntityManager();

                $ideMesSer = $request->get('ideMesSer');

                $cveMesSer = $em->getRepository('CmBundle:MesaServicios')
                    ->findOneBy(['ideMesSer' => $ideMesSer]);
                $mesSerRespuestas = $em->getRepository('CmBundle:MesaServiciosSeguimiento')
                    ->findBy(['cveMesSer' => $cveMesSer]);
                if ($session->get('externo') == 1) {
                    foreach ($mesSerRespuestas as $msRs) {
                        if ($msRs->getVisto() == 0) {
                            $msRs->setVisto(1);
                            $msRs->setFecVisto(new \DateTime(date('Y-m-d')));
                        }
                    }
                    $em->flush();
                }


                return new Response("OK", 200);

            } else { // ES GET
                $em = $this->getDoctrine()->getEntityManager();

                $ideMesSer = $request->get('ideMesSer');

                return $this->redirect($this->generateUrl('mesa_servicios'));
            }
        } else {
            return $this->redirect($this->generateUrl('logout'));
        }

    }

    public function mesaServiciosCerrarAction(Request $request)
    {
        $session = $request->getSession();
        if ($session->has('idEmpleado')) {
            if ($request->getMethod() == 'POST') {

                $em = $this->getDoctrine()->getEntityManager();

                $ideMesSer = $request->get('ideMesSer');

                $cveMesSer = $em->getRepository('CmBundle:MesaServicios')
                    ->findOneBy(['ideMesSer' => $ideMesSer]);
                $cveMesSer->setEstatus(0);

                $em->flush();

                return $this->render('CmBundle:MesaServicios:respuesta_cerrar_ms.html.twig');

            } else { // ES GET
                $em = $this->getDoctrine()->getEntityManager();

                $ideMesSer = $request->get('ideMesSer');

                return $this->redirect($this->generateUrl('mesa_servicios'));
            }
        } else {
            return $this->redirect($this->generateUrl('logout'));
        }

    }

    public function repositorioAction(Request $request)
    {
        $session = $request->getSession();
        if ($session->has('idEmpleado')) {
            if ($request->getMethod() == 'POST') {
                $em = $this->getDoctrine()->getEntityManager();

                $nomCatRep = $request->get('nomRep');
                $archivo = $request->get('rutaArchivo');
                $desRep = $request->get('desRep');

                $repositorio = new CatalogoRepositorio();
                $repositorio->setNomRep($nomCatRep);
                $repositorio->setDesRep($desRep);
                $repositorio->setEstatus(1);
                $repositorio->setFecMov(new \DateTime(date('Y-m-d')));

                $em->persist($repositorio);
                $em->flush();

                if ($_FILES['rutaArchivo']['error'] > 0) {

                } else {

                    $auxRutaArchivo = "MS/Repositorio/" . $repositorio->getIdeCatRep() . "_" . $_FILES['rutaArchivo']['name'];

                    move_uploaded_file($_FILES['rutaArchivo']['tmp_name'], $auxRutaArchivo);

                    $archivo = new RepositorioArchivos();
                    $archivo->setCveCatRep($repositorio);
                    $archivo->setRutaArchivo($auxRutaArchivo);
                    $archivo->setEstatus(1);
                    $archivo->setFecMov(new \DateTime(date('Y-m-d')));
                    $archivo->setFecCam(null);

                    $em->persist($archivo);
                    $em->flush();
                }

                return $this->redirect($this->generateUrl('repositorio'));

            } else { // ES GET
                $em = $this->getDoctrine()->getEntityManager();

                $repositorios = $em->getRepository('CmBundle:CatalogoRepositorio')
                    ->findBy(['estatus' => 1]);

                $catalogoRepositorio = [];
                foreach ($repositorios as $r) {
                    $auxArchivos = $em->getRepository('CmBundle:RepositorioArchivos')
                        ->findBy(['cveCatRep' => $r, 'estatus' => 1]);
                    $catalogoRepositorio[] = [$r, $auxArchivos];
                }

                return $this->render('CmBundle:Repositorio:home-repositorio.html.twig',
                    array('catalogoRepositorio' => $catalogoRepositorio)
                );
            }
        } else {
            return $this->redirect($this->generateUrl('logout'));
        }

    }
}