<?php

require_once __DIR__ . '/../connect.php';

// Fetch and validate each parameter
$driverID = filterRequest("driverID");
$vin = $encryptionHelper->encryptData(filterRequest("vin"));
$carPlate = $encryptionHelper->encryptData(filterRequest("car_plate"));
$make = filterRequest("make");
$model = filterRequest("model");
$year = filterRequest("year");
$expirationDate = filterRequest("expiration_date");
$color = filterRequest("color");
$owner = $encryptionHelper->encryptData(filterRequest("owner"));
$colorHex = filterRequest("color_hex");
$address = $encryptionHelper->encryptData(filterRequest("address"));
$displacement = filterRequest("displacement");
$fuel = filterRequest("fuel");
$registrationDate = filterRequest("registration_date");

// تحقق من الحقول المطلوبة
if (
    is_null($driverID) || is_null($vin) || is_null($carPlate) ||
    is_null($make) || is_null($model) || is_null($year) ||
    is_null($expirationDate) || is_null($color) || is_null($owner) ||
    is_null($colorHex) || is_null($address) || is_null($displacement) ||
    is_null($fuel) || is_null($registrationDate)
) {
    jsonError("One or more required parameters are missing.");
    exit();
}

$con->beginTransaction();

try {
    $checkSql = "SELECT * FROM `CarRegistration` WHERE `driverID` = :driverID";
    $checkStmt = $con->prepare($checkSql);
    $checkStmt->bindParam(':driverID', $driverID);
    $checkStmt->execute();

    if ($checkStmt->rowCount() > 0) {
        jsonError("Car has already been registered for this driver.");
        exit();
    }

    // إدخال السيارة
    $sqlInsert = "INSERT INTO `CarRegistration` (
        `driverID`, `vin`, `car_plate`, `make`, `model`, `year`, `expiration_date`, 
        `color`, `owner`, `color_hex`, `address`, `displacement`, `fuel`, `registration_date`
    ) VALUES (
        :driverID, :vin, :carPlate, :make, :model, :year, :expirationDate,
        :color, :owner, :colorHex, :address, :displacement, :fuel, :registrationDate
    )";

    $stmtInsert = $con->prepare($sqlInsert);
    $stmtInsert->bindParam(':driverID', $driverID);
    $stmtInsert->bindParam(':vin', $vin);
    $stmtInsert->bindParam(':carPlate', $carPlate);
    $stmtInsert->bindParam(':make', $make);
    $stmtInsert->bindParam(':model', $model);
    $stmtInsert->bindParam(':year', $year);
    $stmtInsert->bindParam(':expirationDate', $expirationDate);
    $stmtInsert->bindParam(':color', $color);
    $stmtInsert->bindParam(':owner', $owner);
    $stmtInsert->bindParam(':colorHex', $colorHex);
    $stmtInsert->bindParam(':address', $address);
    $stmtInsert->bindParam(':displacement', $displacement);
    $stmtInsert->bindParam(':fuel', $fuel);
    $stmtInsert->bindParam(':registrationDate', $registrationDate);

    $stmtInsert->execute();

    if ($stmtInsert->rowCount() > 0) {
        // سجل في carPlateEdit
        $sqlLog = "INSERT INTO `carPlateEdit` 
            (`driverId`, `carPlate`, `color`, `make`, `model`, `expiration_date`, `owner`, `year`, `isEdit`)
            VALUES (:driverID, :carPlate, :color, :make, :model, :expirationDate, :owner, :year, 0)";
        
        $stmtLog = $con->prepare($sqlLog);
        $stmtLog->bindParam(':driverID', $driverID);
        $stmtLog->bindParam(':carPlate', $carPlate);
        $stmtLog->bindParam(':color', $color);
        $stmtLog->bindParam(':make', $make);
        $stmtLog->bindParam(':model', $model);
        $stmtLog->bindParam(':expirationDate', $expirationDate);
        $stmtLog->bindParam(':owner', $owner);
        $stmtLog->bindParam(':year', $year);

        $stmtLog->execute();

        $con->commit();
        jsonSuccess(null, "Car registration data saved and logged successfully");
    } else {
        $con->rollBack();
        jsonError("Failed to save car registration data");
    }
} catch (Exception $e) {
    $con->rollBack();
    jsonError("An error occurred: " . $e->getMessage());
}
?>