using IdokladSdk.Models.BankAccount;
using IdokladSdk.Models.NumericSequence;
using IdokladSdk.Models.ReadOnly.VatRate;
using IdokladSdk.Response;
using Idoklad.Client;
namespace Idoklad.Services;
///
/// Supporting registers: bank accounts, VAT rates and numeric (document) sequences.
///
public sealed class RegistersService
{
private readonly IdokladApiAccessor _accessor;
public RegistersService(IdokladApiAccessor accessor) => _accessor = accessor;
// Bank accounts
public async Task> ListBankAccountsAsync(int page, int pageSize, CancellationToken ct)
=> (await _accessor.Api.BankAccountClient.List().Page(page).PageSize(pageSize).GetAsync(ct)).Unwrap();
public async Task BankAccountDetailAsync(int id, CancellationToken ct)
=> (await _accessor.Api.BankAccountClient.Detail(id).GetAsync(ct)).Unwrap();
public async Task CreateBankAccountAsync(BankAccountPostModel model, CancellationToken ct)
=> (await _accessor.Api.BankAccountClient.PostAsync(model, ct)).Unwrap();
public async Task UpdateBankAccountAsync(BankAccountPatchModel model, CancellationToken ct)
=> (await _accessor.Api.BankAccountClient.UpdateAsync(model, ct)).Unwrap();
public async Task DeleteBankAccountAsync(int id, CancellationToken ct)
=> (await _accessor.Api.BankAccountClient.DeleteAsync(id, ct)).Unwrap();
// VAT rates (read-only)
public async Task> ListVatRatesAsync(int page, int pageSize, CancellationToken ct)
=> (await _accessor.Api.VatRateClient.List().Page(page).PageSize(pageSize).GetAsync(ct)).Unwrap();
public async Task VatRateDetailAsync(int id, CancellationToken ct)
=> (await _accessor.Api.VatRateClient.Detail(id).GetAsync(ct)).Unwrap();
// Numeric sequences (read-only list)
public async Task> ListNumericSequencesAsync(int page, int pageSize, CancellationToken ct)
=> (await _accessor.Api.NumericSequenceClient.List().Page(page).PageSize(pageSize).GetAsync(ct)).Unwrap();
}