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

namespace Ladaer.BackEnd.Infrastructures.DTO.Models.Crm
{
    /// <summary>
    /// CallLog Model - DTO cho tạo/cập nhật cuộc gọi
    /// </summary>
    [Serializable]
    public class CallLogModel : BaseModel<int>
    {
        /// <summary>
        /// Call number - mỗi cuộc gọi có một số, nội bộ của 3CX
        /// </summary>
        [MaxLength(50)]
        public string? HistoryID { get; set; }

        /// <summary>
        /// Call ID - định danh duy nhất của cuộc gọi
        /// </summary>
        [MaxLength(50)]
        public string? CallID { get; set; }

        /// <summary>
        /// Thời gian cuộc gọi
        /// </summary>
        [MaxLength(50)]
        public string? Duration { get; set; }

        /// <summary>
        /// Thời gian bắt đầu cuộc gọi
        /// </summary>
        public DateTime? TimeStart { get; set; }

        /// <summary>
        /// Thời gian trả lời
        /// </summary>
        public DateTime? TimeAnswered { get; set; }

        /// <summary>
        /// Thời gian kết thúc cuộc gọi
        /// </summary>
        public DateTime? TimeEnd { get; set; }

        /// <summary>
        /// Lý do cuộc gọi bị chấm dứt
        /// </summary>
        [MaxLength(100)]
        public string ReasonTerminated { get; set; } = string.Empty;

        /// <summary>
        /// Số điện thoại nguồn
        /// </summary>
        [MaxLength(50)]
        public string FromNo { get; set; } = string.Empty;

        /// <summary>
        /// Số điện thoại đích
        /// </summary>
        [MaxLength(50)]
        public string ToNo { get; set; } = string.Empty;

        /// <summary>
        /// Distinguished name của người gọi
        /// </summary>
        [MaxLength(50)]
        public string FromDN { get; set; } = string.Empty;

        /// <summary>
        /// Distinguished name của đích
        /// </summary>
        [MaxLength(50)]
        public string ToDN { get; set; } = string.Empty;

        /// <summary>
        /// Số được quay
        /// </summary>
        [MaxLength(50)]
        public string DialNo { get; set; } = string.Empty;

        /// <summary>
        /// Lý do thay đổi trong cuộc gọi
        /// </summary>
        [MaxLength(100)]
        public string ReasonChanged { get; set; } = string.Empty;

        /// <summary>
        /// Số cuối cùng
        /// </summary>
        [MaxLength(50)]
        public string FinalNumber { get; set; } = string.Empty;

        /// <summary>
        /// Distinguished name của số cuối cùng
        /// </summary>
        [MaxLength(50)]
        public string FinalDN { get; set; } = string.Empty;

        /// <summary>
        /// Mã thanh toán
        /// </summary>
        [MaxLength(50)]
        public string BillCode { get; set; } = string.Empty;

        /// <summary>
        /// Tỷ lệ thanh toán
        /// </summary>
        public decimal? BillRate { get; set; }

        /// <summary>
        /// Chi phí của cuộc gọi
        /// </summary>
        public decimal? BillCost { get; set; }

        /// <summary>
        /// Tên tỷ lệ của biến thể thanh toán
        /// </summary>
        [MaxLength(100)]
        public string BillName { get; set; } = string.Empty;

        /// <summary>
        /// Tất cả các điểm cuối tham gia vào cuộc gọi
        /// </summary>
        [MaxLength(100)]
        public string Chain { get; set; } = string.Empty;

        /// <summary>
        /// Loại nguồn
        /// </summary>
        [MaxLength(50)]
        public string FromType { get; set; } = string.Empty;

        /// <summary>
        /// Loại đích
        /// </summary>
        [MaxLength(50)]
        public string ToType { get; set; } = string.Empty;

        /// <summary>
        /// Loại đích cuối cùng
        /// </summary>
        [MaxLength(50)]
        public string FinalType { get; set; } = string.Empty;

        /// <summary>
        /// Tên hiển thị nguồn
        /// </summary>
        [MaxLength(100)]
        public string FromDispName { get; set; } = string.Empty;

        /// <summary>
        /// Tên hiển thị đích
        /// </summary>
        [MaxLength(100)]
        public string ToDispName { get; set; } = string.Empty;

        /// <summary>
        /// Tên hiển thị đích cuối cùng
        /// </summary>
        [MaxLength(100)]
        public string FinalDispName { get; set; } = string.Empty;

        /// <summary>
        /// Danh sách các agent hàng đợi
        /// </summary>
        [MaxLength(50)]
        public string MissedQueueCalls { get; set; } = string.Empty;

        /// <summary>
        /// Loại cuộc gọi
        /// </summary>
        [MaxLength(50)]
        public string CallType { get; set; } = string.Empty;

        /// <summary>
        /// Trạng thái Lead
        /// </summary>
        public LeadStatus LeadStatus { get; set; } = LeadStatus.New;

        /// <summary>
        /// Nội dung trạng thái
        /// </summary>
        public string StatusContent { get; set; } = string.Empty;
    }
}
