<?php

declare(strict_types=1);

namespace KupShop\SalesBundle\Entity;

use KupShop\CatalogBundle\ProductList\ProductCollection;
use KupShop\KupShopBundle\Util\Compat\ServiceContainer;
use KupShop\KupShopBundle\Util\Price\TotalPrice;
use KupShop\SellerBundle\Utils\SellerUtil;

class Sale
{
    public int $id;

    public string $code;

    public ?string $currency = null;

    public ?string $languageId = null;

    public \DateTimeImmutable $dateCreated;

    public ?int $userId = null;

    public ?int $orderId = null;

    public ?int $deliveryTypeId = null;

    public ?int $sellerId = null;

    public TotalPrice $totalPrice;

    public ?string $note = null;

    public array $data;

    public array $items;

    public function __construct(
        public ProductCollection $productCollection = new ProductCollection(),
    ) {
    }

    public function getUser(): ?\User
    {
        return $this->userId ? \User::createFromId($this->userId) : null;
    }

    public function getDeliveryType(): ?\DeliveryType
    {
        return $this->deliveryTypeId ? \DeliveryType::get($this->deliveryTypeId, true) : null;
    }

    public function getSeller(): ?array
    {
        if (!$this->sellerId) {
            return null;
        }

        $sellerUtil = ServiceContainer::getService(SellerUtil::class);

        return $sellerUtil->getSeller($this->sellerId);
    }
}
