<?php

declare(strict_types=1);

namespace Autogedal\AwbRetry\Model;

use Eadesigndev\DPD\Model\GenerateAwb as GenerateAwbDPD;
use Eadesigndev\DragonStar\Model\GenerateAwb as GenerateAwbDragonStar;
use Eadesigndev\FanCourier\Model\GenerateAwb as GenerateAwbFan;
use Eadesigndev\GLS\Model\GenerateAwb as GenerateAwbGLS;
use Eadesigndev\NemoExpress\Model\GenerateAwb as GenerateAwbNemoExpress;
use Eadesigndev\Sameday\Model\GenerateAwb as GenerateAwbSameday;
use Eadesigndev\Urgent\Model\GenerateAwb as GenerateAwbUrgent;
use Leadlion\AutogedalOrderFlow\Model\Packeta\GenerateAwb as GenerateAwbPacketa;
use Eadesigndev\Urgent\Api\Data\GenerateAwbInterface;
use Eadesigndev\Awb\Model\Sources\CarrierType;
use Magento\Framework\Exception\LocalizedException;
class CourierResolver
{
    public function __construct(
        private readonly GenerateAwbUrgent $generateAwbUrgent,
        private readonly GenerateAwbFan $generateAwbFan,
        private readonly GenerateAwbDPD $generateAwbDPD,
        private readonly GenerateAwbGLS $generateAwbGLS,
        private readonly GenerateAwbDragonStar $generateAwbDragonStar,
        private readonly GenerateAwbNemoExpress $generateAwbNemoExpress,
        private readonly GenerateAwbSameday $generateAwbSameday,
        private readonly GenerateAwbPacketa $generateAwbPacketa
    ) {
    }

    public function resolve(int $carrierId): GenerateAwbInterface
    {
        return match ($carrierId) {
            CarrierType::URGENT_CURRIER => $this->generateAwbUrgent,
            CarrierType::FAN_CURRIER => $this->generateAwbFan,
            CarrierType::DPD => $this->generateAwbDPD,
            CarrierType::GLS => $this->generateAwbGLS,
            CarrierType::DRAGON_STAR => $this->generateAwbDragonStar,
            CarrierType::NEMO_EXPRESS => $this->generateAwbNemoExpress,
            CarrierType::SAMEDAY => $this->generateAwbSameday,
            CarrierType::PACKETA_FAN_COURIER,
            CarrierType::PACKETA_SAMEDAY => $this->generateAwbPacketa,
            default => throw new LocalizedException(__('Unsupported carrier ID: %1', $carrierId)),
        };
    }
}
