using Lada.Framework.Data.Enums;
using Lada.Framework.DTO;
using System.ComponentModel.DataAnnotations;

namespace Ladaer.BackEnd.Infrastructures.DTO.Models.Finances
{
    /// <summary>
    /// Model cho tài khoản ngân hàng
    /// </summary>
    public class BankAccountModel : BaseModel<int>
    {
        /// <summary>
        /// Tên tài khoản ngân hàng
        /// </summary>
        [Required(ErrorMessage = "Tên tài khoản không được để trống")]
        [MaxLength(256, ErrorMessage = "Tên tài khoản không được vượt quá 256 ký tự")]
        public string AccountName { get; set; } = string.Empty;

        /// <summary>
        /// Số tài khoản
        /// </summary>
        [Required(ErrorMessage = "Số tài khoản không được để trống")]
        [MaxLength(50, ErrorMessage = "Số tài khoản không được vượt quá 50 ký tự")]
        public string AccountNumber { get; set; } = string.Empty;

        /// <summary>
        /// ID thông tin ngân hàng
        /// </summary>
        public int BankId { get; set; }



        /// <summary>
        /// Người quản lý tài khoản
        /// </summary>
        public int? ManagerUserId { get; set; }

        /// <summary>
        /// Có tự động cập nhật số dư không
        /// </summary>
        public bool AutoUpdateBalance { get; set; } = true;
    }

    /// <summary>
    /// Model chi tiết tài khoản ngân hàng
    /// </summary>
    public class BankAccountDetailModel : BankAccountModel
    {
        /// <summary>
        /// Tên người quản lý
        /// </summary>
        public string ManagerUserName { get; set; } = string.Empty;

        /// <summary>
        /// Họ tên người quản lý
        /// </summary>
        public string ManagerFullName { get; set; } = string.Empty;

        /// <summary>
        /// Ngày cập nhật số dư cuối cùng
        /// </summary>
        public DateTimeOffset? LastBalanceUpdate { get; set; }

        /// <summary>
        /// Ngày giao dịch cuối cùng
        /// </summary>
        public DateTimeOffset? LastTransactionDate { get; set; }

        /// <summary>
        /// Số lượng giao dịch
        /// </summary>
        public int TransactionCount { get; set; }

        /// <summary>
        /// Tổng tiền vào trong tháng
        /// </summary>
        public decimal MonthlyIncome { get; set; }

        /// <summary>
        /// Tổng tiền ra trong tháng
        /// </summary>
        public decimal MonthlyOutcome { get; set; }
    }
}
