using IdokladSdk.Models.PriceListItem;
using IdokladSdk.Models.StockMovement;
using IdokladSdk.Models.Tag;
using Idoklad.Client;
namespace Idoklad.Services;
///
/// Catalog and stock agendas: price list items, stock movements and tags.
///
public sealed class CatalogService
{
private readonly IdokladApiAccessor _accessor;
public CatalogService(IdokladApiAccessor accessor) => _accessor = accessor;
// ---- Price list items ----
public Task ListPriceListItemsAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.PriceListItemClient.List().ToPageAsync(page, pageSize, ct);
public Task PriceListItemDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.PriceListItemClient.Detail(id).ToDetailAsync(ct);
public async Task PriceListItemDefaultAsync(CancellationToken ct)
=> (await _accessor.Api.PriceListItemClient.DefaultAsync(ct)).Unwrap();
public async Task CreatePriceListItemAsync(PriceListItemPostModel model, CancellationToken ct)
=> (await _accessor.Api.PriceListItemClient.PostAsync(model, ct)).Unwrap();
public async Task UpdatePriceListItemAsync(PriceListItemPatchModel model, CancellationToken ct)
=> (await _accessor.Api.PriceListItemClient.UpdateAsync(model, ct)).Unwrap();
// ---- Stock movements ----
public Task ListStockMovementsAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.StockMovementClient.List().ToPageAsync(page, pageSize, ct);
public Task StockMovementDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.StockMovementClient.Detail(id).ToDetailAsync(ct);
public async Task StockMovementDefaultAsync(int priceListItemId, CancellationToken ct)
=> (await _accessor.Api.StockMovementClient.DefaultAsync(priceListItemId, ct)).Unwrap();
public async Task CreateStockMovementAsync(StockMovementPostModel model, CancellationToken ct)
=> (await _accessor.Api.StockMovementClient.PostAsync(model, ct)).Unwrap();
public async Task UpdateStockMovementAsync(StockMovementPatchModel model, CancellationToken ct)
=> (await _accessor.Api.StockMovementClient.UpdateAsync(model, ct)).Unwrap();
public async Task DeleteStockMovementAsync(int id, CancellationToken ct)
=> (await _accessor.Api.StockMovementClient.DeleteAsync(id, ct)).Unwrap();
// ---- Tags ----
public Task ListTagsAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.TagClient.List().ToPageAsync(page, pageSize, ct);
public async Task CreateTagAsync(TagPostModel model, CancellationToken ct)
=> (await _accessor.Api.TagClient.PostAsync(model, ct)).Unwrap();
public async Task UpdateTagAsync(TagPatchModel model, CancellationToken ct)
=> (await _accessor.Api.TagClient.UpdateAsync(model, ct)).Unwrap();
public async Task DeleteTagAsync(int id, CancellationToken ct)
=> (await _accessor.Api.TagClient.DeleteAsync(id, ct)).Unwrap();
}