<?php

namespace App\Shared\Captcha;

use App\Shared\Controller\BaseController;
use OpenApi\Attributes as OA;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Attribute\Route;

#[OA\Tag(name: 'Captcha')]
class CaptchaController extends BaseController
{
    public function __construct(private readonly AltchaService $altcha) {}

    #[OA\Get(
        path: '/api/v1/altcha/challenge',
        summary: 'صدور یک challenge امضاشده‌ی ALTCHA برای حل proof-of-work سمت مرورگر',
        responses: [new OA\Response(response: 200, description: 'ALTCHA challenge object')]
    )]
    #[Route('/api/v1/altcha/challenge', methods: ['GET'])]
    public function challenge(): JsonResponse
    {
        // هر challenge باید یکتا و تازه باشد؛ کش‌شدن توسط CDN/پراکسی (مثل ArvanCloud)
        // هم چلنج را بین کاربران مشترک می‌کند (شکستن one-time) و هم ممکن است صفحه‌ی
        // HTML کش‌شده برگرداند. با no-store کش کاملاً غیرفعال می‌شود.
        $response = new JsonResponse($this->altcha->createChallenge());
        $response->headers->set('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0');

        return $response;
    }

    #[OA\Get(
        path: '/api/v1/altcha/config',
        summary: 'وضعیت فعال/غیرفعال بودن کپچا — کلاینت‌ها بر اساس آن widget را رندر می‌کنند',
        responses: [new OA\Response(response: 200, description: '{ "enabled": bool }')]
    )]
    #[Route('/api/v1/altcha/config', methods: ['GET'])]
    public function config(): JsonResponse
    {
        $response = new JsonResponse(['enabled' => $this->altcha->enabled()]);
        $response->headers->set('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0');

        return $response;
    }
}
