<?php
session_start();
header('Content-Type: application/json');

require_once __DIR__ . '/../classes/DB.php';
require_once __DIR__ . '/../classes/User.php';
require_once __DIR__ . '/../classes/Collection.php';

$user = User::fromSession();
if (!$user) {
    echo json_encode(["ok" => false, "error" => "Not logged in"]);
    exit;
}

$db = DB::get();

$action   = $_POST['action']   ?? null;
$imageId  = $_POST['image_id'] ?? null;
$replaceId = $_POST['replace_id'] ?? null;

if (!$action) {
    echo json_encode(["ok" => false, "error" => "Missing action"]);
    exit;
}

switch ($action) {

    /* -------------------------
       ADD TO COLLECTION
    --------------------------*/
    case "add":

        if (!$imageId) {
            echo json_encode(["ok" => false, "error" => "Missing image_id"]);
            exit;
        }

        $count = Collection::countForUser($user->id);

        // Already full?
        if ($count >= 5) {
            echo json_encode([
                "ok" => false,
                "error" => "full",
                "message" => "Collection full"
            ]);
            exit;
        }

        // Add
        $stmt = $db->prepare("INSERT INTO collections (user_id, image_id, created_at) VALUES (?, ?, NOW())");
        $stmt->execute([$user->id, $imageId]);

        // Remove from pool
        $db->prepare("UPDATE images SET pool_enabled = 0 WHERE id = ?")
           ->execute([$imageId]);

        echo json_encode(["ok" => true, "added" => $imageId]);
        break;


    /* -------------------------
       REMOVE FROM COLLECTION
    --------------------------*/
    case "remove":

        if (!$imageId) {
            echo json_encode(["ok" => false, "error" => "Missing image_id"]);
            exit;
        }

        // Remove row
        $db->prepare("DELETE FROM collections WHERE user_id = ? AND image_id = ?")
           ->execute([$user->id, $imageId]);

        // Return to pool
        $db->prepare("UPDATE images SET pool_enabled = 1 WHERE id = ?")
           ->execute([$imageId]);

        echo json_encode(["ok" => true, "removed" => $imageId]);
        break;


    /* -------------------------
       REPLACE (when full)
    --------------------------*/
    case "replace":

        if (!$imageId || !$replaceId) {
            echo json_encode(["ok" => false, "error" => "Missing image_id or replace_id"]);
            exit;
        }

        // Remove old
        $db->prepare("DELETE FROM collections WHERE user_id = ? AND image_id = ?")
           ->execute([$user->id, $replaceId]);

        // Return old to pool
        $db->prepare("UPDATE images SET pool_enabled = 1 WHERE id = ?")
           ->execute([$replaceId]);

        // Add new
        $db->prepare("INSERT INTO collections (user_id, image_id, created_at) VALUES (?, ?, NOW())")
           ->execute([$user->id, $imageId]);

        // Remove new from pool
        $db->prepare("UPDATE images SET pool_enabled = 0 WHERE id = ?")
           ->execute([$imageId]);

        echo json_encode([
            "ok" => true,
            "replaced" => $replaceId,
            "added" => $imageId
        ]);
        break;


    default:
        echo json_encode(["ok" => false, "error" => "Unknown action"]);
}