<?php
class AuthController
{
    public function login(): void
    {
        View::render('auth/login');
    }

    public function doLogin(): void
    {
        CSRF::check();
        $email = trim($_POST['email'] ?? '');
        $password = $_POST['password'] ?? '';
        if (Auth::login($email, $password)) {
            $user = Auth::user();
            if (($user['role'] ?? '') === 'admin') {
                redirect('admin/dashboard');
            }
            redirect('dashboard');
        }
        flash('danger', 'E-mail ou senha invalidos.');
        redirect('login');
    }

    public function register(): void
    {
        View::render('auth/register');
    }

    public function doRegister(): void
    {
        CSRF::check();
        $required = ['name', 'cpf', 'email', 'whatsapp', 'uf', 'city', 'bairro', 'category', 'password'];
        foreach ($required as $field) {
            if (trim($_POST[$field] ?? '') === '') {
                flash('danger', 'Preencha todos os campos obrigatórios.');
                redirect('register');
            }
        }
        if (strlen($_POST['password']) < 6) {
            flash('danger', 'A senha precisa ter no mínimo 6 caracteres.');
            redirect('register');
        }
        if (!is_valid_cpf_basic($_POST['cpf'] ?? '')) {
            flash('danger', 'CPF inválido. Informe os 11 dígitos e não use sequência repetida como 000.000.000-00.');
            redirect('register');
        }
        if (!is_valid_whatsapp_br($_POST['whatsapp'] ?? '')) {
            flash('danger', 'WhatsApp inválido. Informe com DDD e 11 dígitos no formato (00) 00000-0000.');
            redirect('register');
        }
        $category = strtoupper(trim((string)($_POST['category'] ?? '')));
        $qa=max(0,(int)($_POST['lessons_a']??0)); $qb=max(0,(int)($_POST['lessons_b']??0)); $qo=max(0,(int)($_POST['lessons_other']??0));
        if ($category==='A' && $qa<2) { flash('danger','A categoria A exige no mínimo 2 aulas.'); redirect('register'); }
        if ($category==='B' && $qb<2) { flash('danger','A categoria B exige no mínimo 2 aulas.'); redirect('register'); }
        if ($category==='AB' && ($qa<2 || $qb<2)) { flash('danger','A categoria AB exige no mínimo 2 aulas de moto e 2 aulas de carro.'); redirect('register'); }
        if (in_array($category,['C','D','E'],true) && $qo<2) { flash('danger','Esta categoria exige no mínimo 2 aulas práticas.'); redirect('register'); }
        try {
            User::createStudent($_POST);
            flash('success', 'Solicitação enviada. O administrador precisa aprovar seu cadastro e a quantidade de aulas antes do primeiro acesso.');
            redirect('login');
        } catch (InvalidArgumentException $e) {
            flash('danger', $e->getMessage());
            redirect('register');
        } catch (PDOException $e) {
            if ($e->getCode() === '23000') {
                flash('danger', 'CPF ou e-mail ja cadastrado.');
            } else {
                flash('danger', 'Não foi possivel criar o cadastro.');
            }
            redirect('register');
        }
    }

    public function logout(): void
    {
        Auth::logout();
        redirect('home');
    }
}
