using System.Linq.Expressions;
using Strata.Code.DataAccess.Models;

namespace Strata.Code.DataAccess.Repositories.Interfaces
{
    public interface IBudgetConfigDefaultSettingRepository
    {
        Task<IEnumerable<BudgetConfigDefaultSetting>> GetAllAsync();
        Task<IEnumerable<BudgetConfigDefaultSetting>> GetAllWithChildrenAsync();
        Task<BudgetConfigDefaultSetting?> GetByIdAsync(int id);
        Task<IEnumerable<BudgetConfigDefaultSetting>> GetByNameAsync(string name);
        Task<IEnumerable<BudgetConfigDefaultSetting>> GetByIdsAsync(IEnumerable<int> ids);
        Task<BudgetConfigDefaultSetting> CreateAsync(BudgetConfigDefaultSetting setting);
        Task<BudgetConfigDefaultSetting?> UpdateAsync(BudgetConfigDefaultSetting setting);
        Task<bool> DeleteAsync(int id);
        Task<IEnumerable<BudgetConfigDefaultSetting>> FindByAsync(Expression<Func<BudgetConfigDefaultSetting, bool>> predicate);
        bool ValidateSetting(BudgetConfigDefaultSetting setting, out IList<string> errors);
    }
}
