using System.ComponentModel.DataAnnotations;

namespace WebClientBase.Shared.DTOs;

/// <summary>
/// EN: User registration DTO with validation.
/// VI: DTO đăng ký user với validation.
/// </summary>
public class RegisterDto
{
    /// <summary>
    /// EN: User email address.
    /// VI: Địa chỉ email user.
    /// </summary>
    [Required(ErrorMessage = "Email là bắt buộc / Email is required")]
    [EmailAddress(ErrorMessage = "Email không hợp lệ / Invalid email format")]
    public string Email { get; set; } = string.Empty;

    /// <summary>
    /// EN: User password with strength requirements.
    /// VI: Mật khẩu user với yêu cầu độ mạnh.
    /// </summary>
    [Required(ErrorMessage = "Mật khẩu là bắt buộc / Password is required")]
    [StringLength(100, MinimumLength = 8, ErrorMessage = "Mật khẩu phải từ 8-100 ký tự / Password must be 8-100 chars")]
    [RegularExpression(@"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).+$", 
        ErrorMessage = "Mật khẩu phải có chữ hoa, chữ thường và số / Password must have upper, lower and digit")]
    public string Password { get; set; } = string.Empty;

    /// <summary>
    /// EN: Password confirmation must match.
    /// VI: Xác nhận mật khẩu phải khớp.
    /// </summary>
    [Required(ErrorMessage = "Xác nhận mật khẩu là bắt buộc / Confirm password is required")]
    [Compare(nameof(Password), ErrorMessage = "Mật khẩu không khớp / Passwords do not match")]
    public string ConfirmPassword { get; set; } = string.Empty;

    /// <summary>
    /// EN: User display name.
    /// VI: Tên hiển thị của user.
    /// </summary>
    [Required(ErrorMessage = "Tên là bắt buộc / Name is required")]
    [StringLength(50, MinimumLength = 2, ErrorMessage = "Tên phải từ 2-50 ký tự / Name must be 2-50 chars")]
    public string DisplayName { get; set; } = string.Empty;

    /// <summary>
    /// EN: Accept terms of service.
    /// VI: Chấp nhận điều khoản dịch vụ.
    /// </summary>
    [Range(typeof(bool), "true", "true", ErrorMessage = "Bạn phải chấp nhận Điều khoản dịch vụ / You must accept the Terms of Service")]
    public bool AcceptTerms { get; set; }
}

/// <summary>
/// EN: User login DTO.
/// VI: DTO đăng nhập user.
/// </summary>
public class LoginDto
{
    /// <summary>
    /// EN: User email address.
    /// VI: Địa chỉ email user.
    /// </summary>
    [Required(ErrorMessage = "Email là bắt buộc / Email is required")]
    [EmailAddress(ErrorMessage = "Email không hợp lệ / Invalid email format")]
    public string Email { get; set; } = string.Empty;

    /// <summary>
    /// EN: User password.
    /// VI: Mật khẩu user.
    /// </summary>
    [Required(ErrorMessage = "Mật khẩu là bắt buộc / Password is required")]
    public string Password { get; set; } = string.Empty;

    /// <summary>
    /// EN: Remember me option.
    /// VI: Tùy chọn ghi nhớ đăng nhập.
    /// </summary>
    public bool RememberMe { get; set; }
}

/// <summary>
/// EN: User profile DTO.
/// VI: DTO hồ sơ user.
/// </summary>
public class UserProfileDto
{
    public Guid Id { get; set; }
    public string Email { get; set; } = string.Empty;
    public string DisplayName { get; set; } = string.Empty;
    public string? AvatarUrl { get; set; }
    public DateTime CreatedAt { get; set; }
    public bool EmailVerified { get; set; }
}
