<?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 GetSmartLink
{
    public function __construct(
        private SmartLinkService $smartLinkService
    ) {
    }

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

        return new JsonResult([
            'id' => $smartLink->id->toString(),
            'short_code' => $smartLink->shortCode->toString(),
            'type' => $smartLink->type->value,
            'title' => $smartLink->title->toString(),
            'status' => $smartLink->status->value,
            'cover_image_url' => $smartLink->coverImageUrl,
            'user_id' => $smartLink->userId,
            'settings' => [
                'password_protected' => $smartLink->settings->isPasswordProtected(),
                'click_limit' => $smartLink->settings->clickLimit,
                'custom_domain' => $smartLink->settings->customDomain,
                'show_branding' => $smartLink->settings->showBranding,
            ],
            'created_at' => $smartLink->createdAt->format('Y-m-d H:i:s'),
            'updated_at' => $smartLink->updatedAt->format('Y-m-d H:i:s'),
        ]);
    }
}
