<?php
namespace App\Controllers;

use App\Models\PostulanteModel;
use App\Models\EmpresaModel;
use App\Models\UsuarioModel;
use App\Models\NivelAcademicoModel;
use App\Models\HabilidadModel;
use App\Models\PostulanteHabilidadModel;

class Perfil extends BaseController
{
    public function index()
    {
        if (!session()->get('logueado')) {
            return redirect()->to(base_url('login'));
        }

        $tipo = session()->get('usuario_tipo');

        if ($tipo == 1) {
            return $this->candidato();
        } elseif ($tipo == 2) {
            return $this->empresa();
        } elseif ($tipo == 3) {
            return $this->admin();
        }

        return redirect()->to(base_url('/'));
    }

    private function candidato()
    {
        $postulanteModel = new PostulanteModel();
        $nivelAcademicoModel = new NivelAcademicoModel();
        $cvModel             = new \App\Models\CvModel();
        $habilidadModel          = new HabilidadModel();
        $postulanteHabilidadModel = new PostulanteHabilidadModel();
        
        $postulante = $postulanteModel
            ->where('usuarios_id', session()->get('usuario_id'))
            ->first();

         $niveles = $nivelAcademicoModel->orderBy('id', 'ASC')->findAll();
         $habilidades = $habilidadModel->orderBy('nombre', 'ASC')->findAll();

         $cv = null;
         $habilidadesSeleccionadas = [];

        if ($postulante) {
            $cv = $cvModel->where('postulantes_id', $postulante['id'])
                      ->where('activo', 1)
                      ->first();
            $seleccionadas = $postulanteHabilidadModel
            ->where('postulantes_id', $postulante['id'])
            ->findAll();

        $habilidadesSeleccionadas = array_column($seleccionadas, 'habilidades_id');

        }

        return view('perfil/candidato', [
            'postulante'               => $postulante,
            'niveles'                  => $niveles,
            'cv'                       => $cv,
            'habilidades'              => $habilidades,
            'habilidadesSeleccionadas' => $habilidadesSeleccionadas,
        ]);
    }

    public function actualizarHabilidades(){
    if (!session()->get('logueado')) {
        return redirect()->to(base_url('login'));
    }

    $postulanteModel          = new PostulanteModel();
    $postulanteHabilidadModel = new PostulanteHabilidadModel();

    $postulante = $postulanteModel
        ->where('usuarios_id', session()->get('usuario_id'))
        ->first();

    if ($postulante) {
        // Eliminar habilidades anteriores
        $postulanteHabilidadModel
            ->where('postulantes_id', $postulante['id'])
            ->delete();

        // Insertar nuevas habilidades
        $habilidades = $this->request->getPost('habilidades') ?? [];
        foreach ($habilidades as $habilidadId) {
            $postulanteHabilidadModel->insert([
                'postulantes_id' => $postulante['id'],
                'habilidades_id' => $habilidadId,
            ]);
        }
    }

    return redirect()->to(base_url('perfil'))->with('mensaje', 'Habilidades actualizadas correctamente.');
    }


    private function empresa()
    {
        $empresaModel = new EmpresaModel();
        $empresa = $empresaModel
            ->where('usuarios_id', session()->get('usuario_id'))
            ->first();

        return view('perfil/empresa', [
            'empresa' => $empresa
        ]);
    }

    private function admin()
    {
        return view('perfil/admin');
    }

    //subir CV
    public function subirCV(){
    if (!session()->get('logueado')) {
        return redirect()->to(base_url('login'));
    }

    $archivo = $this->request->getFile('cv');

    if (!$archivo->isValid() || $archivo->getExtension() !== 'pdf') {
        return redirect()->to(base_url('perfil'))->with('error', 'Solo se permiten archivos PDF.');
    }

    // Nombre único para el archivo
    $nombreOriginal = $archivo->getClientName();
    $nombreNuevo    = 'cv_' . session()->get('usuario_id') . '_' . time() . '.pdf';

    // Mover a la carpeta
    $archivo->move(FCPATH . 'uploads/cvs/', $nombreNuevo);

    // Guardar en tabla cvs
    $cvModel = new \App\Models\CvModel();

    // Desactivar CVs anteriores
    $cvModel->where('postulantes_id', $this->obtenerPostulanteId())
            ->set(['activo' => 0])
            ->update();

    // Insertar nuevo CV
    $cvModel->insert([
        'archivo'        => $nombreNuevo,
        'nombre_original'=> $nombreOriginal,
        'postulantes_id' => $this->obtenerPostulanteId(),
        'activo'         => 1,
    ]);

    return redirect()->to(base_url('perfil'))->with('mensaje', 'CV subido correctamente.');
    }

    // Método helper para obtener el id del postulante
    private function obtenerPostulanteId()
    {
        $postulanteModel = new PostulanteModel();
        $postulante = $postulanteModel
        ->where('usuarios_id', session()->get('usuario_id'))
        ->first();
        return $postulante['id'];
    }


    public function actualizar(){
    if (!session()->get('logueado')) {
        return redirect()->to(base_url('login'));
    }

    $postulanteModel = new PostulanteModel();
    $usuarioModel    = new UsuarioModel();

    $postulante = $postulanteModel
        ->where('usuarios_id', session()->get('usuario_id'))
        ->first();

    // Actualizar tabla postulantes
    $postulanteModel->where('usuarios_id', session()->get('usuario_id'))
        ->set([
            'telefono'             => $this->request->getPost('telefono'),
            'direccion'            => $this->request->getPost('direccion'),
            'profesion'            => $this->request->getPost('profesion'),
            'resumen'              => $this->request->getPost('resumen'),
            'experiencia'          => $this->request->getPost('experiencia'),
            'niveles_academicos_id'=> $this->request->getPost('niveles_academicos_id'),
            'fecha_nacimiento'     => $this->request->getPost('fecha_nacimiento'),
        ])
        ->update();

    // Actualizar nombre en tabla usuarios
    $usuarioModel->update(session()->get('usuario_id'), [
        'nombre' => $this->request->getPost('nombre'),
    ]);

    session()->set('usuario_nombre', $this->request->getPost('nombre'));

    return redirect()->to(base_url('perfil'))->with('mensaje', 'Perfil actualizado correctamente.');
    }


}