<?php

declare(strict_types=1);

namespace App\Application\SmartLink\Api;

use App\Domain\SmartLink\Services\SmartLinkService;
use App\Domain\SmartLink\ValueObjects\SmartLinkId;
use App\Framework\Attributes\Route;
use App\Framework\Http\HttpRequest;
use App\Framework\Http\Method;
use App\Framework\Router\Result\JsonResult;

final readonly class PublishSmartLink
{
    public function __construct(
        private SmartLinkService $smartLinkService
    ) {
    }

    #[Route(path: '/api/smart-links/{id}/publish', method: Method::POST)]
    public function __invoke(HttpRequest $request, string $id): JsonResult
    {
        $smartLink = $this->smartLinkService->publishLink(new SmartLinkId($id));

        return new JsonResult([
            'id' => $smartLink->id->toString(),
            'status' => $smartLink->status->value,
            'published_at' => $smartLink->updatedAt->format('Y-m-d H:i:s'),
        ]);
    }
}
