using Microsoft.AspNetCore.Mvc;
using Csob.Services;
namespace Csob.Controllers;
///
/// AISP – account information. All endpoints require the ČSOB credential headers
/// (eIDAS certificate, access token, API key, TPP name). See the Swagger description for details.
///
[ApiController]
[Route("accounts")]
[Produces("application/json")]
[Tags("AISP – Accounts")]
public sealed class AccountsController : ControllerBase
{
private readonly AccountsService _service;
public AccountsController(AccountsService service) => _service = service;
/// List the PSU's payment accounts (paged).
[HttpGet]
public async Task List(
[FromQuery] int? page, [FromQuery] int? size, [FromQuery] string? sort, [FromQuery] string? order, CancellationToken ct)
=> Ok(await _service.ListAsync(page, size, sort, order, ct));
/// Get the balance(s) of an account.
[HttpGet("{id}/balance")]
public async Task Balance(string id, [FromQuery] string? currency, CancellationToken ct)
=> Ok(await _service.BalanceAsync(id, currency, ct));
/// List booked transactions of an account (paged, optional date range).
[HttpGet("{id}/transactions")]
public async Task Transactions(
string id,
[FromQuery] int? page, [FromQuery] int? size, [FromQuery] string? sort, [FromQuery] string? order,
[FromQuery] string? dateFrom, [FromQuery] string? dateTo, CancellationToken ct)
=> Ok(await _service.TransactionsAsync(id, new TransactionQuery
{
Page = page, Size = size, Sort = sort, Order = order, DateFrom = dateFrom, DateTo = dateTo,
}, ct));
/// List awaiting (pending) transactions of an account.
[HttpGet("{id}/transactions/awaiting")]
public async Task Awaiting(string id, [FromQuery] int? page, [FromQuery] int? size, CancellationToken ct)
=> Ok(await _service.AwaitingTransactionsAsync(id, page, size, ct));
/// List the account's existing standing orders.
[HttpGet("{id}/standing-orders")]
public async Task StandingOrders(string id, [FromQuery] int? page, [FromQuery] int? size, CancellationToken ct)
=> Ok(await _service.StandingOrdersAsync(id, page, size, ct));
/// Get a standing-order detail for the account.
[HttpGet("{id}/standing-orders/{standingOrderId}")]
public async Task StandingOrderDetail(string id, string standingOrderId, CancellationToken ct)
=> Ok(await _service.StandingOrderDetailAsync(id, standingOrderId, ct));
/// List the account's direct-debit mandates.
[HttpGet("{id}/direct-debits")]
public async Task DirectDebits(string id, [FromQuery] int? page, [FromQuery] int? size, CancellationToken ct)
=> Ok(await _service.DirectDebitsAsync(id, page, size, ct));
}