<?php

declare(strict_types=1);

namespace App\Domain\SmartLink;

use App\Domain\SmartLink\Repositories\ClickEventRepository;
use App\Domain\SmartLink\Repositories\DatabaseClickEventRepository;
use App\Domain\SmartLink\Repositories\DatabaseLinkDestinationRepository;
use App\Domain\SmartLink\Repositories\DatabaseSmartLinkRepository;
use App\Domain\SmartLink\Repositories\LinkDestinationRepository;
use App\Domain\SmartLink\Repositories\SmartLinkRepository;
use App\Framework\Database\ConnectionInterface;
use App\Framework\DI\Initializer;

final readonly class SmartLinkServiceInitializer
{
    #[Initializer]
    public function initializeSmartLinkRepository(
        ConnectionInterface $connection
    ): SmartLinkRepository {
        return new DatabaseSmartLinkRepository($connection);
    }

    #[Initializer]
    public function initializeLinkDestinationRepository(
        ConnectionInterface $connection
    ): LinkDestinationRepository {
        return new DatabaseLinkDestinationRepository($connection);
    }

    #[Initializer]
    public function initializeClickEventRepository(
        ConnectionInterface $connection
    ): ClickEventRepository {
        return new DatabaseClickEventRepository($connection);
    }
}
