<?php
namespace api\Controllers;

use api\ApiRouter;
use Domain\Attribute\AttributeRepository;
use Domain\ShopStatus\ShopStatusRepository;
use Domain\Transport\TransportRepository;
use Domain\PaymentMethod\PaymentMethodRepository;

class DictionariesApiController
{
    private $statusRepo;
    private $transportRepo;
    private $paymentRepo;
    private $attrRepo;

    public function __construct(
        ShopStatusRepository $statusRepo,
        TransportRepository $transportRepo,
        PaymentMethodRepository $paymentRepo,
        AttributeRepository $attrRepo
    ) {
        $this->statusRepo = $statusRepo;
        $this->transportRepo = $transportRepo;
        $this->paymentRepo = $paymentRepo;
        $this->attrRepo = $attrRepo;
    }

    public function statuses(): void
    {
        if (!ApiRouter::requireMethod('GET')) {
            return;
        }

        $statuses = $this->statusRepo->allStatuses();

        $result = [];
        foreach ($statuses as $id => $name) {
            $result[] = [
                'id' => (int)$id,
                'name' => (string)$name,
            ];
        }

        ApiRouter::sendSuccess($result);
    }

    public function transports(): void
    {
        if (!ApiRouter::requireMethod('GET')) {
            return;
        }

        $transports = $this->transportRepo->allActive();

        $result = [];
        foreach ($transports as $transport) {
            $result[] = [
                'id' => (int)($transport['id'] ?? 0),
                'name' => (string)($transport['name_visible'] ?? $transport['name'] ?? ''),
                'cost' => (float)($transport['cost'] ?? 0),
            ];
        }

        ApiRouter::sendSuccess($result);
    }

    public function payment_methods(): void
    {
        if (!ApiRouter::requireMethod('GET')) {
            return;
        }

        $methods = $this->paymentRepo->allActive();

        $result = [];
        foreach ($methods as $method) {
            $result[] = [
                'id' => (int)($method['id'] ?? 0),
                'name' => (string)($method['name'] ?? ''),
            ];
        }

        ApiRouter::sendSuccess($result);
    }

    public function attributes(): void
    {
        if (!ApiRouter::requireMethod('GET')) {
            return;
        }

        $attributes = $this->attrRepo->listForApi();

        ApiRouter::sendSuccess($attributes);
    }
}
