<?php

namespace App\Models;

use CodeIgniter\Model;

class Persona extends GenericModel
{
    protected $table            = 'persona';
    protected $primaryKey       = 'pers_id';
    protected $allowedFields    = ['pers_id',
	'pers_primer_nombre',
	'pers_segundo_nombre',
	'pers_primer_apellido',
	'pers_segundo_apellido',
	'pers_fecha_nac',
	'pers_sexo',
	'pers_tipo_doc',
	'pers_num_doc',
	'pers_ubigeo_nac',
	'pers_ubigeo_actual',
	'pers_direccion',
	'pers_celular',
	'pers_estado_civil',
	'pers_correo',
	'pers_telefono',
	'pers_pais',
	'pers_departamento',
	'pers_provincia',
	'pers_distrito',
	'pers_departamento_actual',
	'pers_provincia_actual',
	'pers_distrito_actual',
	'pers_trabajo',
	'pers_ocupacion',
	'pers_condicion_laboral',
	'pers_empresa',
	'pers_tipo_familia',
	'pers_familia_nombres',
	'pers_familia_apellidos',
	'pers_familia_ocupacion',
	'pers_familia_telefono',
	'pers_familia_centro_laboral',
	'pers_familia_correo',
	'pers_discapacidad',
	'pers_discapacidad_nombre',
	'pers_etnia',
	'pers_lengua_originaria',
	'pers_foto',
	'pers_estado',
	'tido_id',
	'pers_nacionalidad',
	'pers_imagen',
	'pers_perfil_profesional',
	'pers_habilidades_tecnicas',
	'pers_archivo_documento_identidad',
	'pers_discapacidad_archivo',
	'pers_licenciado_ffaa',
	'pers_licenciado_ffaa_archivo',
	'pers_deportista_calificado',
	'pers_deportista_calificado_archivo',
	'pers_lugar_nacimiento',
	'pers_uuid',
    ];

    public function getPersonas($term)
    {
        return $this->select(' pers_num_doc,pers_id,persona.pers_primer_nombre, persona.pers_segundo_nombre, persona.pers_primer_apellido, persona.pers_segundo_apellido')
            ->orLike('persona.pers_num_doc', $term)
            ->orLike('persona.pers_primer_nombre', $term)
            ->orLike('persona.pers_segundo_nombre', $term)
            ->orLike('persona.pers_primer_apellido', $term)
            ->orLike('persona.pers_segundo_apellido', $term)
            ->findAll();
    }

    public function savePostulante()
    {
        $this->db->transBegin();

        $request = \Config\Services::request();
        $personaModel = new Persona();
        $usuarioModel = new UsuarioModel();
        $permisoModel = new Permiso();

        $success = $personaModel->save([
            'pers_primer_nombre' => strtoupper($request->getVar('pers_primer_nombre')),
            'pers_segundo_nombre' => '',
            'pers_primer_apellido' => strtoupper($request->getVar('pers_primer_apellido')),
            'pers_segundo_apellido' => strtoupper($request->getVar('pers_segundo_apellido')),
            'pers_fecha_nac' => null,
            'pers_sexo' => '',
            'pers_num_doc' => $request->getVar('pers_num_doc'),
            'pers_ubigeo_nac' => null,
            'pers_ubigeo_actual' => null,
            'pers_direccion' => '',
            'pers_celular' => '',
            'pers_correo' => $request->getVar('usua_usuario'),
            'pers_foto' => null,
            'tido_id' => 1,
            'pers_estado' => true,
        ]);

        if(!$success){
            $this->db->transRollback();
            return 'Error al registrar la persona';
        }

        $pers_id = $personaModel->insertID();

        $success = $usuarioModel->save([
            'pers_id' => $pers_id,
            'usua_usuario' => $request->getVar('usua_usuario'),
            'usua_contrasena' => password_hash($request->getVar('usua_contrasena'), PASSWORD_BCRYPT),
            'usua_estado' => false
        ]);

        if(!$success){
            $this->db->transRollback();
            return 'Error al registrar el usuario';
        }

        $usua_id = $usuarioModel->insertID();

        $success = $permisoModel->save([
            'perm_estado' => true,
            'perf_id' => 17,
            'usua_id' => $usua_id,
        ]);

        if(!$success){
            $this->db->transRollback();
            return 'Error al registrar los permisos';
        }

        //ENVIAR EL CORREO
        $persona = $personaModel->find($pers_id);
        $mensaje = view('bolsatrabajo/email/view_confirmar',[
            'url' => site_url('usuario/confirmar') . '?id='.$persona->pers_uuid
        ]);

        $email = service('email');
        $email->setTo($request->getVar('usua_usuario'));
        $email->setSubject('Bolsa de trabajo - Registro');
        $email->setMessage($mensaje);

        if ($email->send()){

        }else{
            $this->db->transRollback();
            return $email->printDebugger(['headers']);
        }

        if ($this->db->transStatus() === false) {
            $this->db->transRollback();
        } else {
            $this->db->transCommit();
        }

        return '';
    }

    public function saveEmpresa()
    {
        $this->db->transBegin();

        $request = \Config\Services::request();

        $personaModel = new Persona();
        $empresaDatosModel = new EmpresaDatosModel();
        $usuarioModel = new UsuarioModel();
        $permisoModel = new Permiso();

        $success = $personaModel->save([
            'pers_primer_nombre' => strtoupper($request->getVar('pers_primer_nombre')),
            'pers_segundo_nombre' => '',
            'pers_primer_apellido' => '',
            'pers_segundo_apellido' => '',
            'pers_fecha_nac' => null,
            'pers_sexo' => '',
            'pers_num_doc' => $request->getVar('pers_num_doc'),
            'pers_ubigeo_nac' => null,
            'pers_ubigeo_actual' => null,
            'pers_direccion' => strtoupper($request->getVar('pers_direccion')),
            'pers_celular' => '',
            'pers_correo' => $request->getVar('usua_usuario'),
            'pers_foto' => null,
            'tido_id' => 2,
            'pers_estado' => true,
        ]);

        if(!$success){
            $this->db->transRollback();
            return 'Error al registrar la persona';
        }

        $pers_id = $personaModel->insertID();

        $success = $empresaDatosModel->save([
            'emta_responsable_documento' => strtoupper($request->getVar('emta_responsable_documento')),
            'emta_responsable_nombres' => strtoupper($request->getVar('emta_responsable_nombres')),
            'emta_responsable_primer_apellido' => strtoupper($request->getVar('emta_responsable_primer_apellido')),
            'emta_responsable_segundo_apellido' => strtoupper($request->getVar('emta_responsable_segundo_apellido')),
            'emta_responsable_correo' => ($request->getVar('emta_responsable_correo')),
            'emta_responsable_telefono' => strtoupper($request->getVar('emta_responsable_telefono')),
            'emda_nombre_comercial' => strtoupper($request->getVar('emda_nombre_comercial')),
            'emse_id' => $request->getVar('emse_id'),
            'emta_id' => $request->getVar('emta_id'),
            'emda_descripcion' => strtoupper($request->getVar('emda_descripcion')),
            'pers_id' => $pers_id,
        ]);

        if(!$success){
            $this->db->transRollback();
            return 'Error al registrar la empresa';
        }

        $success = $usuarioModel->save([
            'pers_id' => $pers_id,
            'usua_usuario' => $request->getVar('usua_usuario'),
            'usua_contrasena' => password_hash($request->getVar('usua_contrasena'), PASSWORD_BCRYPT),
            'usua_estado' => false
        ]);

        if(!$success){
            $this->db->transRollback();
            return 'Error al registrar el usuario';
        }

        $usua_id = $usuarioModel->insertID();

        $success = $permisoModel->save([
            'perm_estado' => true,
            'perf_id' => 18,
            'usua_id' => $usua_id,
        ]);

        if(!$success){
            $this->db->transRollback();
            return 'Error al registrar el permiso';
        }

        //ENVIAR EL CORREO
        $persona = $personaModel->find($pers_id);
        $mensaje = view('bolsatrabajo/email/view_confirmar',[
            'url' => site_url('usuario/confirmar') . '?id='.$persona->pers_uuid
        ]);

        $email = service('email');
        $email->setTo($request->getVar('usua_usuario'));
        $email->setSubject('Bolsa de trabajo - Registro');
        $email->setMessage($mensaje);

        if ($email->send()){

        }else{
            $this->db->transRollback();
            return $email->printDebugger(['headers']);
        }

        if ($this->db->transStatus() === false) {
            $this->db->transRollback();
        } else {
            $this->db->transCommit();
        }

        return '';

    }

}
