<?php

namespace App\Controllers;

use App\Controllers\GenericController;
use App\Libraries\CIAuth;
use App\Libraries\Hash;
use App\Models\EmpresaDatosModel;
use App\Models\EmpresaSectorModel;
use App\Models\EmpresaTamanioModel;
use App\Models\Permiso;
use App\Models\Persona;
use App\Models\ProfesorModel;
use App\Models\UsuarioModel;

class AuthController extends GenericController
{
    public function login()
    {
        return view('auth/view_login.php',[
            'pageTitle'=>'Login',
            'validation'=>null
        ]);
    }

    public function postulante()
    {
        return view('auth/view_login_postulante.php',[
            'pageTitle'=>'Registrar postulante',
            'registrado'=>false
        ]);
    }

    public function postulanteRegistrar()
    {

        $rules = [
            'pers_num_doc'=>[
                'rules'=>'required|is_unique[persona.pers_num_doc]',
                'errors'=>[
                    'required'=>'Ingrese Dni',
                    'is_unique'=>'Numero documento ya existe en el sistema.',
                ]
            ],
            'pers_primer_nombre'=>[
                'rules'=>'required',
                'errors'=>[
                    'required'=>'Ingrese nombres',
                ]
            ],
            'pers_primer_apellido'=>[
                'rules'=>'required',
                'errors'=>[
                    'required'=>'Ingrese primer apellido',
                ]
            ],
            'pers_segundo_apellido'=>[
                'rules'=>'required',
                'errors'=>[
                    'required'=>'Ingrese segundo apellido',
                ]
            ],
            'usua_usuario'=>[
                'rules'=>'required|is_unique[usuario.usua_usuario]|valid_email',
                'errors'=>[
                    'required'=>'Ingrese correo',
                    'is_unique'=>'Correo ya existe en el sistema.',
                    'valid_email'=>'Correo incorrecto.'
                ]
            ],
            'usua_contrasena'=>[
                'rules'=>'required|min_length[3]|max_length[45]|matches[usua_contrasena_repite]',
                'errors'=>[
                    'required'=>'Ingrese clave',
                    'min_length'=>'Clave deve tener como minimo 3 caracteres.',
                    'max_length'=>'Clave deve tener como maximo 45 caracteres.',
                    'matches'=>'Las contraseñas no coinciden.',
                ]
            ]
        ];

        $data = $this->request->getVar();

        if (! $this->validateData($data, $rules)) {
            return view('auth/view_login_postulante',[
                'pageTitle'=>'Registrar postulante',
                'registrado'=>false
            ]);
        }

        $personaModel = new Persona();

        $registradoError = $personaModel->savePostulante();

        return view('auth/view_login_postulante',[
            'pageTitle'=>'Registrar postulante',
            'registrado'=>true,
            'registradoError'=>$registradoError,
        ]);

    }

    public function empresa()
    {

        $empresaSectorModel = new EmpresaSectorModel();
        $empresaTamanioModel = new EmpresatamanioModel();

        $lsEmpresaSector = $empresaSectorModel->where('emse_estado',1)->findAll();
        $lsEmpresaTamanio = $empresaTamanioModel->where('emta_estado',1)->findAll();

        return view('auth/view_login_empresa.php',[
            'pageTitle'=>'Registrar empresa',
            'lsEmpresaSector'=>$lsEmpresaSector,
            'lsEmpresaTamanio'=>$lsEmpresaTamanio,
            'registrado'=>false
        ]);
    }

    public function empresaRegistrar()
    {

        $rules = [
            'emta_responsable_documento'=>[
                'rules'=>'required',
                'errors'=>[
                    'required'=>'Ingrese Dni responsable',
                ]
            ],
            'emta_responsable_nombres'=>[
                'rules'=>'required',
                'errors'=>[
                    'required'=>'Ingrese nombres responsable',
                ]
            ],
            'emta_responsable_primer_apellido'=>[
                'rules'=>'required',
                'errors'=>[
                    'required'=>'Ingrese primer apellido responsable',
                ]
            ],
            'emta_responsable_segundo_apellido'=>[
                'rules'=>'required',
                'errors'=>[
                    'required'=>'Ingrese segundo apellido responsable',
                ]
            ],

            'pers_num_doc'=>[
                'rules'=>'required',
                'errors'=>[
                    'required'=>'Ingrese ruc empresa',
                ]
            ],
            'pers_primer_nombre'=>[
                'rules'=>'required',
                'errors'=>[
                    'required'=>'Ingrese razon social empresa',
                ]
            ],
            'pers_direccion'=>[
                'rules'=>'required',
                'errors'=>[
                    'required'=>'Ingrese direccion empresa',
                ]
            ],

            'usua_usuario'=>[
                'rules'=>'required|is_unique[usuario.usua_usuario]|valid_email',
                'errors'=>[
                    'required'=>'Ingrese correo',
                    'is_unique'=>'Correo ya existe en el sistema.',
                    'valid_email'=>'Correo incorrecto.'
                ]
            ],
            'usua_contrasena'=>[
                'rules'=>'required|min_length[3]|max_length[45]|matches[usua_contrasena_repite]',
                'errors'=>[
                    'required'=>'Ingrese clave',
                    'min_length'=>'Clave deve tener como minimo 3 caracteres.',
                    'max_length'=>'Clave deve tener como maximo 45 caracteres.',
                    'matches'=>'Las contraseñas no coinciden.',
                ]
            ]
        ];

        $data = $this->request->getVar();

        if (! $this->validateData($data, $rules)) {
            return $this->empresa();
        }

        $personaModel = new Persona();

        $registradoError = $personaModel->saveEmpresa();

        return view('auth/view_login_empresa',[
            'pageTitle'=>'Registrar empresa',
            'registrado'=>true,
            'registradoError'=>$registradoError,
        ]);

    }

    public function confirmar(){
        $UUID = $this->request->getVar('id');

        $personaModel = new Persona();
        $usuarioModel = new UsuarioModel();
        $persona = $personaModel->getByUuid($UUID,'pers_uuid');

        if($persona != null){
            $success = $personaModel->where('pers_id', $persona->pers_id)
                ->set([
                    'pers_estado' => 1,
                ])->update();

            $success = $usuarioModel->where('pers_id', $persona->pers_id)
                ->set([
                    'usua_estado' => 1,
                ])->update();

            return view('auth/view_login_postulante',[
                'pageTitle'=>'Registrar postulante',
                'registrado'=>true,
                'registradoError'=>'VALIDADO',
            ]);
        }else{
            return view('auth/view_login_postulante',[
                'pageTitle'=>'Registrar postulante',
                'registrado'=>true,
                'registradoError'=>'No se encontro el registro',
            ]);
        }

    }

    public function logoutHandler(){
        CIAuth::forget();
        return redirect()->route('auth.login')->with('fail','¡Estás desconectado!');
    }

    public function loginHandler(){

        $isValid = $this->validate([
            'usua_usuario'=>[
                'rules'=>'required|is_not_unique[usuario.usua_usuario]',
                'errors'=>[
                    'required'=>'Ingrese Usuario',
                    'is_not_unique'=>'Usuario no existe en el sistema.'
                ]
            ],
            'usua_contrasena'=>[
                'rules'=>'required|min_length[3]|max_length[45]',
                'errors'=>[
                    'required'=>'Ingrese clave',
                    'min_length'=>'Clave deve tener como minimo 3 caracteres.',
                    'max_length'=>'Clave deve tener como maximo 45 caracteres.'
                ]
            ]
        ]);

        if( !$isValid ){
            return view('auth/view_login.php',[
                'pageTitle'=>'Login',
                'validation'=>$this->validator
            ]);
        }else{
            $usuario = new UsuarioModel();
            $personaModel = new Persona();
            $permisoModel = new Permiso();

            $userInfo = $usuario->where("usua_usuario", $this->request->getVar('usua_usuario'))->where("usua_estado", 1)->first();

            if($userInfo == null){
                return redirect()->route('auth.login')->with('fail','Usuario no existe o no esta activo')->withInput();
            }

            $check_password = Hash::check($this->request->getVar('usua_contrasena'), $userInfo->usua_contrasena);

            if( !$check_password ){
                return redirect()->route('auth.login')->with('fail','Clave incorrecta')->withInput();
            }else{

                $persona = $personaModel->find($userInfo->pers_id);
                $permisoPostulante = $permisoModel->where('perf_id', 17)->where('perm_estado', 1)->where('usua_id', $userInfo->usua_id)->first();
                $permisoEmpresa = $permisoModel->where('perf_id', 18)->where('perm_estado', 1)->where('usua_id', $userInfo->usua_id)->first();

                $userInfo->persona = $persona;
                $userInfo->isPostulante = $permisoPostulante!=null;
                $userInfo->isEmpresa = $permisoEmpresa!=null;

                CIAuth::setCIAuth($userInfo);
                return redirect()->route('home.modulo');

            }
        }
    }
}