using Lada.Framework.DTO;
using Lada.Framework.DTO.SmartTable;
using Ladaer.BackEnd.Infrastructures.DTO.Items.Finance;
using Ladaer.BackEnd.Infrastructures.DTO.Models.Finance;

namespace Ladaer.BackEnd.Infrastructures.Services.Finance
{
    /// <summary>
    /// Interface service quản lý tài khoản ngân hàng người dùng
    /// </summary>
    public interface IUserBankAccountService
    {
        /// <summary>
        /// Tìm kiếm tài khoản ngân hàng người dùng
        /// </summary>
        /// <param name="param">Tham số tìm kiếm</param>
        /// <returns>Kết quả tìm kiếm</returns>
        Task<SmartTableResult<UserBankAccountItem>> Search(SmartTableParam param);

        /// <summary>
        /// Lấy thông tin chi tiết tài khoản ngân hàng theo ID
        /// </summary>
        /// <param name="id">ID tài khoản ngân hàng</param>
        /// <returns>Thông tin chi tiết tài khoản ngân hàng</returns>
        Task<UserBankAccountModel> GetById(int id);

        /// <summary>
        /// Tạo mới hoặc cập nhật tài khoản ngân hàng
        /// </summary>
        /// <param name="model">Thông tin tài khoản ngân hàng</param>
        /// <returns>Kết quả của thao tác</returns>
        Task<BaseResult> CreateOrUpdate(UserBankAccountModel model);

        /// <summary>
        /// Xóa tài khoản ngân hàng
        /// </summary>
        /// <param name="model">Thông tin tài khoản ngân hàng cần xóa</param>
        /// <returns>Kết quả của thao tác</returns>
        Task<BaseResult> Delete(UserBankAccountModel model);

        /// <summary>
        /// Lấy danh sách tài khoản ngân hàng của người dùng
        /// </summary>
        /// <param name="userId">ID người dùng</param>
        /// <returns>Danh sách tài khoản ngân hàng</returns>
        Task<List<UserBankAccountItem>> GetByUserId(int userId);

        /// <summary>
        /// Tìm kiếm tài khoản ngân hàng của người dùng cụ thể
        /// </summary>
        /// <param name="param">Tham số tìm kiếm</param>
        /// <param name="userId">ID người dùng</param>
        /// <returns>Kết quả tìm kiếm</returns>
        Task<SmartTableResult<UserBankAccountItem>> SearchByUserId(SmartTableParam param, int userId);

        /// <summary>
        /// Lấy tài khoản ngân hàng theo ID và kiểm tra quyền sở hữu
        /// </summary>
        /// <param name="id">ID tài khoản ngân hàng</param>
        /// <param name="userId">ID người dùng</param>
        /// <returns>Thông tin tài khoản ngân hàng</returns>
        Task<UserBankAccountModel?> GetByIdAndUserId(int id, int userId);

        /// <summary>
        /// Xóa tài khoản ngân hàng với kiểm tra quyền sở hữu
        /// </summary>
        /// <param name="id">ID tài khoản ngân hàng</param>
        /// <param name="userId">ID người dùng</param>
        /// <param name="updatedBy">ID người cập nhật</param>
        /// <param name="updatedByUserName">Tên người cập nhật</param>
        /// <returns>Kết quả của thao tác</returns>
        Task<BaseResult> DeleteByIdAndUserId(int id, int userId, int updatedBy, string updatedByUserName);
    }
}
