<?php

require_once __DIR__ . '/../lib/init.php';
Auth::requireLogin();
Auth::requireRole('admin');

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    header('Location: settings.php');
    exit;
}

$username = trim($_POST['username'] ?? '');
$password = $_POST['password'] ?? '';
$role     = $_POST['role']     ?? 'tech';
$errors   = [];

if (strlen($username) < 3 || !preg_match('/^[a-zA-Z0-9_\-]+$/', $username)) {
    $errors[] = 'Nom d\'utilisateur invalide (min. 3 caractères, lettres/chiffres/_/- uniquement).';
}
if (strlen($password) < 6) {
    $errors[] = 'Le mot de passe doit comporter au moins 6 caractères.';
}

if (!$errors) {
    try {
        $id = Auth::createUser($username, $password, $role);
        AuditLog::log('user.add', 'user', $id, $username);
        $_SESSION['flash'] = ['type' => 'success', 'message' => "Utilisateur « $username » créé."];
    } catch (PDOException $e) {
        if ($e->getCode() == 23000) {
            $_SESSION['flash'] = ['type' => 'danger', 'message' => 'Ce nom d\'utilisateur est déjà pris.'];
        } else {
            $_SESSION['flash'] = ['type' => 'danger', 'message' => 'Erreur : ' . $e->getMessage()];
        }
    }
}

if ($errors) {
    $_SESSION['flash'] = ['type' => 'danger', 'message' => implode(' ', $errors)];
}

header('Location: settings.php');
exit;
