namespace Repository;

public interface IBudgetArchiveRepository : IBaseRepository<BudgetArchive>
{
    Task<BudgetArchive?> GetArchiveAsync(int year, int month);

    Task<List<BudgetArchive>> GetListAsync(int year, int month);

    Task<List<BudgetArchive>> GetArchivesByYearAsync(int year);
}

public class BudgetArchiveRepository(
    IFreeSql freeSql
) : BaseRepository<BudgetArchive>(freeSql), IBudgetArchiveRepository
{
    public async Task<BudgetArchive?> GetArchiveAsync(int year, int month)
    {
        return await FreeSql.Select<BudgetArchive>()
            .Where(a => a.Year == year &&
                        a.Month == month)
            .ToOneAsync();
    }

    public async Task<List<BudgetArchive>> GetListAsync(int year, int month)
    {
        return await FreeSql.Select<BudgetArchive>()
            .Where(a => a.Year == year && a.Month == month)
            .ToListAsync();
    }

    public async Task<List<BudgetArchive>> GetArchivesByYearAsync(int year)
    {
        return await FreeSql.Select<BudgetArchive>()
            .Where(a => a.Year == year)
            .OrderBy(a => a.Month)
            .ToListAsync();
    }
}