using foodmarket.Application.Purchases.Commands;
using foodmarket.Application.Sales.Commands;

namespace foodmarket.Api.Infrastructure.Cqrs;

/// <summary>Заглушки для абстракций CQRS-handler'ов из food-market.application:
/// контроллеры в текущем спринте остаются на прямом доступе к DbContext
/// (поэтапная миграция к CQRS), эти классы нужны только чтобы DI-validation
/// на старте не падал при попытке активировать handler.
///
/// Когда контроллер начнёт реально слать команду через IMediator, заменяем
/// эти стабы на реальную имплементацию (через EF, IStockService и т.п.).
/// При случайной активации throw'аем — phantom-инициализация не должна молча
/// проглатывать команды.</summary>
public sealed class UnusedSupplyWriter : ISupplyWriter
{
    public Task<string> NextNumberAsync(int year, CancellationToken ct)
        => throw new NotImplementedException(
            "CreateSupplyHandler ещё не подключён к контроллерам. " +
            "Контроллер использует прямой доступ к EF; этот writer существует только как образец CQRS-абстракции.");

    public Task<Guid> CreateAsync(Guid supplierId, Guid storeId, Guid currencyId,
        DateTime date, string? notes, string number,
        IReadOnlyList<CreateSupplyLine> lines, decimal total, CancellationToken ct)
        => throw new NotImplementedException(
            "CreateSupplyHandler ещё не подключён к контроллерам.");
}

public sealed class UnusedRetailSalePoster : IRetailSalePoster
{
    public Task PostAsync(Guid saleId, IReadOnlyList<PostSaleLine> lines, CancellationToken ct)
        => throw new NotImplementedException(
            "PostRetailSaleHandler ещё не подключён к контроллерам. " +
            "Контроллер RetailSalesController.Post использует прямой stock-service.");
}
