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

namespace Ladaer.BackEnd.Infrastructures.DTO.Models.Orders
{
    public class OrderAddressModel : IValidatableObject
    {
        public int Id { get; set; }

        public int OrderId { get; set; }

        [Required(ErrorMessage = "Tên người liên hệ không để trống")]
        public string Name { get; set; }

        [Required(ErrorMessage = "Số điện thoại không để trống")]
        [RegularExpression(@"^\d{10,15}$", ErrorMessage = "Số điện thoại không hợp lệ")]
        public string PhoneNumber1 { get; set; }

        public string? PhoneNumber2 { get; set; }

        [Required(ErrorMessage = "Địa chỉ không để trống")]
        public string Address1 { get; set; }

        public string? Address2 { get; set; }

        public AddressType AddressType { get; set; }

        [Required(ErrorMessage = "Tỉnh / thành phố không để trống")]
        [Min(1, ErrorMessage = "Chọn một Tỉnh / thành phố hợp lệ")]
        public int CityId { get; set; }

        [Required(ErrorMessage = "Quận / huyện không để trống")]
        [Min(1, ErrorMessage = "Chọn một Quận / huyện hợp lệ")]
        public int DistrictId { get; set; }

        [Required(ErrorMessage = "Phường xã không để trống")]
        [Min(1, ErrorMessage = "Chọn một Phường xã hợp lệ")]
        public int WardId { get; set; }

        public string Note { get; set; }

        public int? UpdatedBy { get; set; }
        public string? UpdatedByUserName { get; set; }

        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            if (!string.IsNullOrEmpty(PhoneNumber2))
            {
                // Nếu PhoneNumber2 được cung cấp, kiểm tra xem nó có đúng định dạng số điện thoại không
                if (!System.Text.RegularExpressions.Regex.IsMatch(PhoneNumber2, @"^\d{10,15}$"))
                {
                    yield return new ValidationResult("Số điện thoại 2 không hợp lệ", new[] { nameof(PhoneNumber2) });
                }
            }   
        }
    }
}
