<?php
declare(strict_types=1);

namespace Autogedal\StockSourceRouter\Model;

use Magento\Framework\App\ResourceConnection;

class FallbackState
{
    private const TABLE = 'autogedal_stock_router_fallback';

    /** Per-request cache to avoid repeated DB reads within the same cron run. */
    private array $cache = [];

    public function __construct(private readonly ResourceConnection $resource) {}

    public function isOnFallback(string $sku): bool
    {
        if (array_key_exists($sku, $this->cache)) {
            return $this->cache[$sku];
        }

        $connection = $this->resource->getConnection();
        $count = (int)$connection->fetchOne(
            $connection->select()
                ->from($this->resource->getTableName(self::TABLE), ['COUNT(*)'])
                ->where('sku = ?', $sku)
        );

        return $this->cache[$sku] = $count > 0;
    }

    public function activate(string $sku, string $primarySource): void
    {
        $this->resource->getConnection()->insertOnDuplicate(
            $this->resource->getTableName(self::TABLE),
            [
                'sku'            => $sku,
                'primary_source' => $primarySource,
                'activated_at'   => date('Y-m-d H:i:s'),
            ]
        );
        $this->cache[$sku] = true;
    }

    public function deactivate(string $sku): void
    {
        $this->resource->getConnection()->delete(
            $this->resource->getTableName(self::TABLE),
            ['sku = ?' => $sku]
        );
        $this->cache[$sku] = false;
    }
}
