using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using Strata.Code.DataAccess.Models;

namespace Strata.Code.Business.Services.Interfaces
{
    public class BudgetConfigDefaultSettingDto
    {
        public int SettingId { get; set; }

        public string Name { get; set; } = null!;

        public string Description { get; set; } = null!;

        public bool DefaultValue { get; set; }

        public DateOnly DateCreated { get; set; }
    }

    public class LinkedSettingsRequest<T>
    {
        public string LinkTable { get; set; } = null!;
        public string LinkColumn { get; set; } = null!;
        public IEnumerable<T> LinkIds { get; set; } = null!;
    }

    public interface IBudgetConfigDefaultSettingService
    {
        Task<IEnumerable<BudgetConfigDefaultSettingDto>> GetAllAsync();
        Task<BudgetConfigDefaultSettingDto?> GetByIdAsync(int id);
        Task<IEnumerable<BudgetConfigDefaultSettingDto>> GetByNameAsync(string name);
        Task<IEnumerable<BudgetConfigDefaultSettingDto>> GetByIdsAsync(IEnumerable<int> ids);
        Task<BudgetConfigDefaultSettingDto> CreateAsync(BudgetConfigDefaultSettingDto setting);
        Task<BudgetConfigDefaultSettingDto?> UpdateAsync(BudgetConfigDefaultSettingDto setting);
        Task<bool> DeleteAsync(int id);
        Task<IEnumerable<BudgetConfigDefaultSettingDto>> FindByAsync(Expression<Func<BudgetConfigDefaultSetting, bool>> predicate);
    }
}
