<?php
require_once "../db/connect.php";
session_start();

// Se POST: esegue la registrazione e risponde JSON
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    header('Content-Type: application/json');

    $nome = trim($_POST['nome'] ?? '');
    $cognome = trim($_POST['cognome'] ?? '');
    $data_nascita = trim($_POST['data_nascita'] ?? '');
    $luogo_nascita = trim($_POST['luogo_nascita'] ?? '');
    $cod_fiscale = strtoupper(trim($_POST['cod_fiscale'] ?? ''));
    $telefono = preg_replace('/\D+/', '', $_POST['telefono'] ?? '');

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

    // Validazioni base
    $errors = [];
    if ($nome === '' || $cognome === '' || $luogo_nascita === '') {
        $errors[] = 'Nome, Cognome e Luogo di nascita sono obbligatori';
    }
    if ($data_nascita === '' || !preg_match('/^\d{4}-\d{2}-\d{2}$/', $data_nascita)) {
        $errors[] = 'Data di nascita non valida (YYYY-MM-DD)';
    }
    if ($cod_fiscale === '' || strlen($cod_fiscale) !== 16) {
        $errors[] = 'Codice Fiscale deve avere 16 caratteri';
    }
    if ($telefono === '' || !preg_match('/^\d{6,10}$/', $telefono)) {
        $errors[] = 'Telefono deve contenere 6-10 cifre';
    }
    if ($username === '' || strlen($username) < 3) {
        $errors[] = 'Username deve avere almeno 3 caratteri';
    }
    // password policy
    if ($password === '' || preg_match('/\s/', $password)) {
        $errors[] = 'La password non deve contenere spazi';
    }
    if (strlen($password) < 8) {
        $errors[] = 'La password deve avere almeno 8 caratteri';
    }
    if (!preg_match('/[a-z]/', $password)) {
        $errors[] = 'La password deve contenere almeno una lettera minuscola';
    }
    if (!preg_match('/[A-Z]/', $password)) {
        $errors[] = 'La password deve contenere almeno una lettera maiuscola';
    }
    if (!preg_match('/[^a-zA-Z0-9]/', $password)) {
        $errors[] = 'La password deve contenere almeno un carattere speciale';
    }

    // Escaping semplice per evitare errori sintattici
    $nome_e = mysqli_real_escape_string($conn, $nome);
    $cognome_e = mysqli_real_escape_string($conn, $cognome);
    $data_nascita_e = mysqli_real_escape_string($conn, $data_nascita);
    $luogo_nascita_e = mysqli_real_escape_string($conn, $luogo_nascita);
    $cod_fiscale_e = mysqli_real_escape_string($conn, $cod_fiscale);
    $telefono_e = mysqli_real_escape_string($conn, $telefono);
    $username_e = mysqli_real_escape_string($conn, $username);
    $password_e = mysqli_real_escape_string($conn, $password);

    // Verifica username univoco
    $check = mysqli_query($conn, "SELECT user_id FROM `user` WHERE descrizione = '$username_e' LIMIT 1");
    if ($check && mysqli_num_rows($check) > 0) {
        $errors[] = 'Username già esistente';
    }

    if (!empty($errors)) {
        echo json_encode(['status' => 'error', 'errors' => $errors]);
        exit;
    }

    // Inserimenti semplici (senza transazioni per semplicità)
    $oggi = date('Y-m-d');
    $sql_person = "INSERT INTO `person` (nome, cognome, data_nascita, luogo_nascita, cod_fiscale, telefono) VALUES ('$nome_e', '$cognome_e', '$data_nascita_e', '$luogo_nascita_e', '$cod_fiscale_e', '$telefono_e')";
    if (!mysqli_query($conn, $sql_person)) {
        echo json_encode(['status' => 'error', 'errors' => ['Errore inserimento persona']]);
        exit;
    }
    $person_id = mysqli_insert_id($conn);

    $sql_user = "INSERT INTO `user` (descrizione, data, person_id, password) VALUES ('$username_e', '$oggi', $person_id, '$password_e')";
    if (!mysqli_query($conn, $sql_user)) {
        echo json_encode(['status' => 'error', 'errors' => ['Errore inserimento utente']]);
        exit;
    }
    $user_id = mysqli_insert_id($conn);

    $sql_perm = "INSERT INTO `permission` (user_id, role, data) VALUES ($user_id, 3, '$oggi')";
    if (!mysqli_query($conn, $sql_perm)) {
        echo json_encode(['status' => 'error', 'errors' => ['Errore assegnazione ruolo']]);
        exit;
    }

    // Login automatico e risposta
    $_SESSION['user_id'] = (int)$user_id;
    $_SESSION['username'] = $username;
    $_SESSION['role_id'] = 3;
    $_SESSION['role_name'] = 'utente';

    echo json_encode(['status' => 'ok']);
    exit;
} else {
    header('Content-Type: application/json');
    http_response_code(405);
    echo json_encode(['status' => 'error', 'errors' => ['Metodo non consentito']]);
    exit;
}