<?php
namespace App\Controllers;

use App\Models\UsuarioModel;
use App\Models\PostulanteModel;
use App\Models\EmpresaModel;
use App\Models\UsuarioTipoModel;

class Auth extends BaseController
{
    // ─── REGISTRO CANDIDATO ───────────────────────────────
    public function registro()
    {
        return view('auth/registro');
    }

    public function registroGuardar()
    {
        $rules = [
            'nombre'         => 'required|min_length[2]',
            'email'          => 'required|valid_email|is_unique[usuarios.email]',
            'password'       => 'required|min_length[6]',
            'puesto_deseado' => 'required',
            'departamento'   => 'required',
        ];

       

        if (!$this->validate($rules)) {
            return view('auth/registro', ['errors' => $this->validator->getErrors()]);
        }

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

        // 1. Guardar en usuarios
        $usuarioId = $usuarioModel->insert([
            'nombre'   => $this->request->getPost('nombre'),
            'email'    => $this->request->getPost('email'),
            'password' => password_hash($this->request->getPost('password'), PASSWORD_DEFAULT),
        ]);

        // 2. Guardar en usuario_tipo (tipo candidato = 1)
        $usuarioTipoModel->insert([
            'tipos_usuario_id' => 1,
            'usuarios_id'      => $usuarioId,
        ]);

        // 3. Guardar en postulantes
        $postulanteModel->insert([
            'usuarios_id' => $usuarioId,
            'profesion'   => $this->request->getPost('puesto_deseado'),
            'direccion'   => $this->request->getPost('departamento'),
        ]);

       // return redirect()->to(base_url('login'))->with('mensaje', '¡Cuenta creada! Ya puedes iniciar sesión.');
       session()->set([
            'usuario_id'     => $usuarioId,
            'usuario_nombre' => $this->request->getPost('nombre'),
            'usuario_tipo'   => 1,
            'logueado'       => true,
        ]);

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

    // ─── REGISTRO EMPRESA ─────────────────────────────────
    public function registroEmpresa()
    {
        return view('auth/registro_empresa');
    }

    public function registroEmpresaGuardar()
    {
        $rules = [
            'nombre'         => 'required|min_length[2]',
            'email'          => 'required|valid_email|is_unique[usuarios.email]',
            'password'       => 'required|min_length[6]',
            'nombre_empresa' => 'required|min_length[2]',
            'departamento'   => 'required',
        ];

        if (!$this->validate($rules)) {
            return view('auth/registro_empresa', ['errors' => $this->validator->getErrors()]);
        }

        $usuarioModel     = new UsuarioModel();
        $empresaModel     = new EmpresaModel();
        $usuarioTipoModel = new UsuarioTipoModel();

        // 1. Guardar en usuarios
        $usuarioId = $usuarioModel->insert([
            'nombre'   => $this->request->getPost('nombre'),
            'email'    => $this->request->getPost('email'),
            'password' => password_hash($this->request->getPost('password'), PASSWORD_DEFAULT),
        ]);

        // 2. Guardar en usuario_tipo (tipo empresa = 2)
        $usuarioTipoModel->insert([
            'tipos_usuario_id' => 2,
            'usuarios_id'      => $usuarioId,
        ]);

        // 3. Guardar en empresas
        $empresaModel->insert([
            'usuarios_id'    => $usuarioId,
            'nombre_empresa' => $this->request->getPost('nombre_empresa'),
            'ubicacion'      => $this->request->getPost('departamento'),
            'sitio_web'      => $this->request->getPost('sitio_web') ?? '',
        ]);

        return redirect()->to(base_url('login'))->with('mensaje', '¡Empresa registrada! Ya puedes iniciar sesión.');
    }


    public function crearAdmin()
{
    $usuarioModel     = new UsuarioModel();
    $usuarioTipoModel = new UsuarioTipoModel();

    $usuarioId = $usuarioModel->insert([
        'nombre'   => 'Admin1',
        'email'    => 'admin1@contratandogt.com',
        'password' => password_hash('admin123', PASSWORD_DEFAULT),
    ]);

    $usuarioTipoModel->insert([
        'tipos_usuario_id' => 3,
        'usuarios_id'      => $usuarioId,
    ]);

    echo 'Admin creado correctamente. Ya puedes eliminar esta ruta.';
}

    // ─── LOGIN ────────────────────────────────────────────
    public function login()
    {
        return view('auth/login');
    }

    public function loginEntrar()
    {
        $usuarioModel     = new UsuarioModel();
        $usuarioTipoModel = new UsuarioTipoModel();

        $email    = $this->request->getPost('email');
        $password = $this->request->getPost('password');
        //$usuario  = $usuarioModel->where('email', $email)->first();
        $usuario = $usuarioModel->buscarPorEmail($email);

        if (!$usuario || !password_verify($password, $usuario['password'])) {
            return view('auth/login', [
                'errors' => ['login' => 'Correo o contraseña incorrectos.']
            ]);
        }

        // Obtener tipo de usuario
        $usuarioTipo = $usuarioTipoModel->where('usuarios_id', $usuario['id'])->first();
        
        //dd($usuarioTipo); // ← agrega esto


        session()->set([
            'usuario_id'   => $usuario['id'],
            'usuario_nombre' => $usuario['nombre'],
            'usuario_tipo' => $usuarioTipo['tipos_usuario_id'], // 1=candidato, 2=empresa, 3=admin
            'logueado'     => true,
        ]);

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

    // ─── LOGOUT ───────────────────────────────────────────
    public function logout()
    {
        session()->destroy();
        return redirect()->to(base_url('/'));
    }
}