<?php
declare(strict_types=1);

/**
 * PATCH /api/email/messages/{id}/flags
 * Set flags on a message. Body: {flagged?, seen?, answered?, deleted?}.
 */

header('Content-Type: application/json');

require_once __DIR__ . '/_bootstrap.php';

use Oscar\MailEngine\ImapClient\InMemoryImapClient;
use Oscar\MailEngine\ImapClient\FlagSet;

try {
    $input = json_decode(file_get_contents('php://input'), true) ?? [];
    if (empty($input)) {
        throw new \InvalidArgumentException('At least one flag must be provided');
    }

    $messageId = $_SERVER['FRESH_ROUTE_PARAMS']['id'] ?? null;
    if (!$messageId) {
        throw new \InvalidArgumentException('Message ID is required');
    }
    $accountId = 'acc1'; // TODO v0.2.0: from session

    $flagSet = new FlagSet(
        flagged: (bool)($input['flagged'] ?? false),
        seen: (bool)($input['seen'] ?? false),
        answered: (bool)($input['answered'] ?? false),
        deleted: (bool)($input['deleted'] ?? false),
    );

    $imap = new InMemoryImapClient();
    $imap->setFlags($messageId, $flagSet, $accountId);

    echo json_encode([
        'ok' => true,
        'flags' => [
            'flagged' => $flagSet->flagged,
            'seen' => $flagSet->seen,
            'answered' => $flagSet->answered,
            'deleted' => $flagSet->deleted,
        ],
    ]);
} catch (\Throwable $e) {
    http_response_code(500);
    echo json_encode(['error' => $e->getMessage()]);
}
