<?php

namespace App\Http\Controllers\Seguimiento\Bienestar;

use App\Http\Requests\ComentarioRequest;
use App\Model\ComentarioSeguimiento;
use App\Model\Departamento;
use App\Model\Distrito;
use App\Model\FichaIntegral;
use App\Model\FichaPostulacion;
use App\Model\Provincia;
use App\Model\Usuario;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use League\Flysystem\Exception;
use Illuminate\Support\Facades\Auth;

class BienestarController extends Controller
{
    public function getAlumnos(){
        return view('pages.seguimiento.bienestar.index');
    }

    public function getFicha(Request $request)
    {
        return view('pages.seguimiento.bienestar.ficha')->with('id',$request->id);
    }

    public function getProvincias(Request $request){
        $provincias = Provincia::where('id_departamento',$request->q)->get();

        $formatted_tags = [];

        foreach ($provincias as $tag) {
            $formatted_tags[] = ['id' => $tag->id, 'text' => $tag->nombre];
        }

        return \Response::json($formatted_tags);
    }

    public function getDepartamentos(){

        $tags = Departamento::all();

        $formatted_tags = [];

        foreach ($tags as $tag) {
            $formatted_tags[] = ['id' => $tag->id, 'text' => $tag->nombre];
        }

        return \Response::json($formatted_tags);
    }

    public function getDistritos(Request $request){
        $distritos = Distrito::where('id_provincia',$request->q)->get();

        $formatted_tags = [];

        foreach ($distritos as $tag) {
            $formatted_tags[] = ['id' => $tag->id, 'text' => $tag->nombre];
        }

        return \Response::json($formatted_tags);
    }

    public function getPersonal(Request $request){
        $personal = FichaPostulacion::join('distrito','distrito.id','=','ficha_postulante.id_distrito_direccion')
            ->join('provincia','provincia.id','=','distrito.id_provincia')
            ->join('departamento','departamento.id','=','provincia.id_departamento')
            ->where('ficha_postulante.id_usuario','=',$request->q)
            ->select(
                'ficha_postulante.id as id',
                'ficha_postulante.id_usuario as id_usuario',
                'ficha_postulante.nombres as Nombre',
                'ficha_postulante.apellido_paterno as apellido_paterno',
                'ficha_postulante.apellido_materno as apellido_materno',
                'ficha_postulante.direccion as Domicilio',
                'ficha_postulante.id_distrito_direccion as Distrito',
                'ficha_postulante.telefono_principal as Telefono',
                'ficha_postulante.nacio_fecha as FechaNacimiento',
                'ficha_postulante.dni as DNI',
                'ficha_postulante.email as Email',
                'ficha_postulante.colegio_nombre as ColegioProcedencia',
                'ficha_postulante.tipo_educacion as TipoColegio',
                'ficha_postulante.estado_civil as EstadoCivil',
                'ficha_postulante.nombre_seguro as Seguro',
                'ficha_postulante.cantidad_hijos as Hijos',
                'departamento.id as DepartamentoId',
                'departamento.nombre as DepartamentoNombre',
                'distrito.id as DistritoId',
                'distrito.nombre as DistritoNombre',
                'provincia.id as ProvinciaId',
                'provincia.nombre as ProvinciaNombre'
            )
            ->get();

        return $personal;
    }

    public function postPersonal(Request $request){
        try{
            $ficha = FichaPostulacion::firstOrNew([
                'id_usuario' => $request->fichaid
            ]);
            $ficha->nombres = $request->nombre;
            $ficha->apellido_paterno = $request->apellido_paterno;
            $ficha->apellido_materno = $request->apellido_materno;
            $ficha->direccion = $request->domicilio;
            $ficha->id_distrito_direccion = $request->distrito;
            $ficha->telefono_principal = $request->phone;
            $ficha->email = $request->email;
            $ficha->colegio_nombre = $request->cprocedencia;
            $ficha->tipo_educacion = $request->tipocolegio;
            $ficha->estado_civil = $request->estadocivil;
            $ficha->nombre_seguro = $request->seguro;
            $ficha->cantidad_hijos = $request->canthijos;
            $ficha->save();
            return response()->json(['success' => 'Se ha actualizado correctamente.'],200);
        }catch(Exception $e){
            return response()->json(['error' => $e->getMessage()], 404);
        }
    }

    public function getSalud(Request $request){
        $personal = FichaIntegral::where('ficha_integral.id_usuario','=',$request->q)
            ->select(
                'ficha_integral.id as id',
                'ficha_integral.id_usuario as id_usuario',
                'ficha_integral.alergias as alergias',
                'ficha_integral.antecedentes as antecedentes',
                'ficha_integral.tabaco as tabaco',
                'ficha_integral.alcohol as alcohol',
                'ficha_integral.desayuno as desayuno',
                'ficha_integral.almuerzo as almuerzo',
                'ficha_integral.cena as cena',
                'ficha_integral.hepa as hepa',
                'ficha_integral.hepb as hepb',
                'ficha_integral.tetano as tetano',
                'ficha_integral.difteria as difteria',
                'ficha_integral.tbc as tbc',
                'ficha_integral.gruposanguineo as gruposanguineo',
                'ficha_integral.influenza as influenza',
                'ficha_integral.otrasvacunas as otrasvacunas',
                'ficha_integral.enfpapa as enfpapa',
                'ficha_integral.enfmama as enfmama',
                'ficha_integral.enfhmno as enfhmno',
                'ficha_integral.enfotros as enfotros')
            ->get();

        return $personal;
    }

    public function postSalud(Request $request){
        try {
            $ficha = FichaIntegral::firstOrNew([
                'id_usuario' => $request->saludid
            ]);
            $ficha->alergias = is_null($request->alergias) ? "" : $request->alergias;
            $ficha->antecedentes = is_null($request->antecedentes) ? "" : $request->antecedentes;
            $ficha->otrasvacunas = is_null($request->otrasvacunas) ? "" : $request->otrasvacunas;
            $ficha->enfpapa = is_null($request->enfpapa) ? "" : $request->enfpapa;
            $ficha->enfmama = is_null($request->enfmama) ? "" : $request->enfmama;
            $ficha->enfhmno = is_null($request->enfhmno) ? "" : $request->enfhmno;
            $ficha->enfotros = is_null($request->enfotros) ? "" : $request->enfotros;
            $ficha->tabaco = $request->tabaco;
            $ficha->alcohol = $request->alcohol;
            $ficha->desayuno = $request->desayuno;
            $ficha->almuerzo = $request->almuerzo;
            $ficha->cena = $request->cena;
            $ficha->gruposanguineo = $request->gruposanguineo;
            $ficha->hepa = $request->hepa == "on" ? true : false;
            $ficha->hepb = $request->hepb == "on" ? true : false;
            $ficha->tetano = $request->tetano == "on" ? true : false;
            $ficha->difteria = $request->difteria == "on" ? true : false;
            $ficha->tbc = $request->tbc == "on" ? true : false;
            $ficha->influenza = $request->influenza == "on" ? true : false;
            if (!$ficha->exists) {
                $ficha->id_usuario = $request->saludid;
            }
            $ficha->save();
            return response()->json(['success' => 'Se ha actualizado correctamente.'],200);
        }catch(Exception $e){
            return response()->json(['error' => $e->getMessage()], 404);
        }
    }

    public function getVivienda(Request $request){
        $personal = FichaIntegral::where('ficha_integral.id_usuario','=',$request->q)
            ->select(
                'ficha_integral.id_usuario as id_usuario',
                'ficha_integral.id as id',
                'ficha_integral.zona as zona',
                'ficha_integral.vereda as vereda',
                'ficha_integral.luz as luz',
                'ficha_integral.posta as posta',
                'ficha_integral.parque as parque',
                'ficha_integral.tipovivienda as tipovivienda',
                'ficha_integral.otravivienda as otravivienda',
                'ficha_integral.tenencia as tenencia',
                'ficha_integral.tenenciao as tenenciao',
                'ficha_integral.areacons as areacons',
                'ficha_integral.estructura as estructura',
                'ficha_integral.condicion as condicion',
                'ficha_integral.sagua as sagua',
                'ficha_integral.sdesague as sdesague',
                'ficha_integral.sbanio as sbanio',
                'ficha_integral.stelefono as stelefono',
                'ficha_integral.scable as scable',
                'ficha_integral.sinternet as sinternet',
                'ficha_integral.spozo as spozo')
            ->get();

        return $personal;
    }

    public function postVivienda(Request $request){
        try {
            $ficha = FichaIntegral::firstOrNew([
                'id_usuario' => $request->viviendaid
            ]);
            $ficha->zona = is_null($request->zona) ? "" : $request->zona;
            $ficha->vereda = $request->vereda == "on" ? true : false;
            $ficha->luz = $request->luz == "on" ? true : false;
            $ficha->posta = $request->posta == "on" ? true : false;
            $ficha->parque = $request->parque == "on" ? true : false;

            $ficha->tipovivienda = $request->tipovivienda;
            $ficha->otravivienda = is_null($request->otravivienda) ? "" : $request->otravivienda;

            $ficha->tenencia = $request->tenencia;
            $ficha->tenenciao = is_null($request->tenenciao) ? "" : $request->tenenciao;

            $ficha->areacons = is_null($request->areacons) ? "" : $request->areacons;

            $ficha->estructura = $request->estructura;
            $ficha->condicion = $request->condicion;

            $ficha->sagua = $request->sagua == "on" ? true : false;
            $ficha->sdesague = $request->sdesague == "on" ? true : false;
            $ficha->stelefono = $request->stelefono == "on" ? true : false;
            $ficha->scable = $request->scable == "on" ? true : false;
            $ficha->sinternet = $request->sinternet == "on" ? true : false;
            $ficha->spozo = $request->spozo == "on" ? true : false;
            $ficha->sbanio = $request->sbanio == "on" ? true : false;
            if (!$ficha->exists) {
                $ficha->id_usuario = $request->viviendaid;
            }
            $ficha->save();
            return response()->json(['success' => 'Se ha actualizado correctamente.'],200);
        }catch(Exception $e){
            return response()->json(['error' => $e->getMessage()], 404);
        }
    }

    public function getCultura(Request $request){
        $personal = FichaIntegral::where('ficha_integral.id_usuario','=',$request->q)
            ->select(
                'ficha_integral.id_usuario as id_usuario',
                'ficha_integral.id as id',
                'ficha_integral.dvoley as dvoley',
                'ficha_integral.dfutbol as dfutbol',
                'ficha_integral.dbasquet as dbasquet',
                'ficha_integral.dnatacion as dnatacion',
                'ficha_integral.datletismo as datletismo',
                'ficha_integral.dotro as dotro',
                'ficha_integral.dlugar as dlugar',
                'ficha_integral.hmusica as hmusica',
                'ficha_integral.hdanza as hdanza',
                'ficha_integral.hteatro as hteatro',
                'ficha_integral.hcanto as hcanto',
                'ficha_integral.hdibujo as hdibujo',
                'ficha_integral.hpintura as hpintura',
                'ficha_integral.hmanuali as hmanuali',
                'ficha_integral.hotro as hotro',
                'ficha_integral.hobby as hobby')
            ->get();

        return $personal;
    }

    public function postCultura(Request $request){
        try {
            $ficha = FichaIntegral::firstOrNew([
                'id_usuario' => $request->culturaid
            ]);

            $ficha->dvoley = $request->dvoley == "on" ? true : false;
            $ficha->dfutbol = $request->dfutbol == "on" ? true : false;
            $ficha->dbasquet = $request->dbasquet == "on" ? true : false;
            $ficha->datletismo = $request->datletismo == "on" ? true : false;
            $ficha->dnatacion = $request->dnatacion == "on" ? true : false;
            $ficha->dotro = is_null($request->dotro) ? "" : $request->dotro;
            $ficha->dlugar = is_null($request->dlugar) ? "" : $request->dlugar;

            $ficha->hmusica = $request->hmusica == "on" ? true : false;
            $ficha->hdanza = $request->hdanza == "on" ? true : false;
            $ficha->hteatro = $request->hteatro == "on" ? true : false;
            $ficha->hcanto = $request->hcanto == "on" ? true : false;
            $ficha->hdibujo = $request->hdibujo == "on" ? true : false;
            $ficha->hpintura = $request->hpintura == "on" ? true : false;
            $ficha->hmanuali = $request->hmanuali == "on" ? true : false;

            $ficha->hotro = is_null($request->hotro) ? "" : $request->hotro;
            $ficha->hobby = is_null($request->hobby) ? "" : $request->hobby;

            if (!$ficha->exists) {
                $ficha->id_usuario = $request->culturaid;
            }
            $ficha->save();
            return response()->json(['success' => 'Se ha actualizado correctamente.'],200);
        }catch(Exception $e){
            return response()->json(['error' => $e->getMessage()], 404);
        }
    }

    public function getReligion(Request $request){
        $personal = FichaIntegral::where('ficha_integral.id_usuario','=',$request->q)
            ->select(
                'ficha_integral.id_usuario as id_usuario',
                'ficha_integral.religion as religion',
                'ficha_integral.parroquia as parroquia',
                'ficha_integral.sbautizo as sbautizo',
                'ficha_integral.scomunion as scomunion',
                'ficha_integral.sconfirmacion as sconfirmacion',
                'ficha_integral.smatrimonioc as smatrimonioc',
                'ficha_integral.smatrimonior as smatrimonior',
                'ficha_integral.sotro as sotro')
            ->get();

        return $personal;
    }

    public function postReligion(Request $request){
        try {
            $ficha = FichaIntegral::firstOrNew([
                'id_usuario' => $request->religionid
            ]);

            $ficha->religion = is_null($request->religion) ? "" : $request->religion;
            $ficha->parroquia = is_null($request->parroquia) ? "" : $request->parroquia;

            $ficha->sbautizo = $request->sbautizo == "on" ? true : false;
            $ficha->scomunion = $request->scomunion == "on" ? true : false;
            $ficha->sconfirmacion = $request->sconfirmacion == "on" ? true : false;
            $ficha->smatrimonioc = $request->smatrimonioc == "on" ? true : false;
            $ficha->smatrimonior = $request->smatrimonior == "on" ? true : false;

            $ficha->sotro = is_null($request->sotro) ? "" : $request->sotro;

            if (!$ficha->exists) {
                $ficha->id_usuario = $request->religionid;
            }

            $ficha->save();

            return response()->json(['success' => 'Se ha actualizado correctamente.'],200);
        }catch(Exception $e){
            return response()->json(['error' => $e->getMessage()], 404);
        }
    }

    public function getPreguntas(Request $request){
        $personal = FichaIntegral::where('ficha_integral.id_usuario','=',$request->q)
            ->select(
                'ficha_integral.rpta1',
                'ficha_integral.rpta2a',
                'ficha_integral.rpta2b',
                'ficha_integral.rpta2c',
                'ficha_integral.rpta2d',
                'ficha_integral.rpta3',
                'ficha_integral.rpta4',
                'ficha_integral.rpta5a',
                'ficha_integral.rpta5b',
                'ficha_integral.rpta5c',
                'ficha_integral.rpta5d',
                'ficha_integral.rpta6a',
                'ficha_integral.rpta6b',
                'ficha_integral.rpta6c',
                'ficha_integral.rpta6d')
            ->get();

        return $personal;
    }

    public function postPreguntas(Request $request){
        try {

            $ficha = FichaIntegral::firstOrNew([
                'id_usuario' => $request->comentarioid
            ]);

            $ficha->rpta1 = is_null($request->rpta1) ? "" : $request->rpta1;
            $ficha->rpta2a = is_null($request->rpta2a) ? "" : $request->rpta2a;
            $ficha->rpta2b = is_null($request->rpta2b) ? "" : $request->rpta2b;
            $ficha->rpta2c = is_null($request->rpta2c) ? "" : $request->rpta2c;
            $ficha->rpta2d = is_null($request->rpta2d) ? "" : $request->rpta2d;
            $ficha->rpta3 = is_null($request->rpta3) ? "" : $request->rpta3;
            $ficha->rpta4 = is_null($request->rpta4) ? "" : $request->rpta4;

            $ficha->rpta5a = $request->rpta5a == "on" ? true : false;
            $ficha->rpta5b = $request->rpta5b == "on" ? true : false;
            $ficha->rpta5c = $request->rpta5c == "on" ? true : false;
            $ficha->rpta5d = is_null($request->rpta5d) ? "" : $request->rpta5d;

            $ficha->rpta6a = is_null($request->rpta6a) ? "" : $request->rpta6a;
            $ficha->rpta6b = is_null($request->rpta6b) ? "" : $request->rpta6b;
            $ficha->rpta6c = is_null($request->rpta6c) ? "" : $request->rpta6c;
            $ficha->rpta6d = is_null($request->rpta6d) ? "" : $request->rpta6d;

            if (!$ficha->exists) {
                $ficha->id_usuario = $request->comentarioid;
            }

            $ficha->save();

            return response()->json(['success' => 'Se ha actualizado correctamente.'],200);
        }catch(Exception $e){
            return response()->json(['error' => $e->getMessage()], 404);
        }
    }

    public function getComentarios(Request $request){

        $ficha = FichaIntegral::firstOrNew([
            'id_usuario' => $request->id
        ]);

        $comentarios = ComentarioSeguimiento::where('id_ficha_integral',$ficha->id)
            ->join('usuario','usuario.id','comentario_seguimiento.id_usuario')
            ->select('comentario_seguimiento.id as id',
                'comentario_seguimiento.descripcion as texto',
                'comentario_seguimiento.updated_at as fecha',
                'comentario_seguimiento.id_usuario as idusuario',
                'usuario.nombres as nombre')
            ->orderBy('comentario_seguimiento.updated_at','desc')
            ->get();

        return response()->json(['result' => $comentarios],200);
    }

    public function postComentarios(ComentarioRequest $request){

        $ficha = FichaIntegral::firstOrNew([
            'id_usuario' => $request->id
        ]);

        $ficha->save();

        $comentario = new ComentarioSeguimiento();

        $comentario->descripcion = $request->comment;
        $comentario->id_usuario =  Auth::user()->id;
        $comentario->id_ficha_integral =  $ficha->id;

        $comentario->save();

        return response()->json(['success' => 'Se ha actualizado correctamente.'],200);

    }

    public function postEditComentarios(ComentarioRequest $request){

        $comentario = ComentarioSeguimiento::findOrFail($request->id);

        if($comentario->id_usuario == Auth::user()->id || Auth::user()->hasRole("Administrador")) {

            $comentario->descripcion = $request->comment;
            $comentario->save();

            return response()->json(['success' => 'Se ha actualizado correctamente.'], 200);
        }

        return response()->json(['status' => 'error','Solo puede editar sus mensajes.'],400);

    }

    public function postComentario(Request $request){

        $comment = ComentarioSeguimiento::findOrFail($request->id);

        return response()->json(['result' => $comment]);

    }

    public function postDeleteComentario(Request $request){

        $comment = ComentarioSeguimiento::findOrFail($request->id);
        if($comment->id_usuario == Auth::user()->id || Auth::user()->hasRole("Administrador")) {
            $comment->delete();
            return response()->json(['result' => 'El mensaje ha sido eliminado correctamente.']);
        }

        return response()->json(['status' => 'error','Solo puede borrar sus mensajes.'],400);

    }
}
