using System.ComponentModel.DataAnnotations;
namespace ROLAC.API.DTOs.Payee;

public class Payee1099ListItemDto
{
    public int     Id                { get; set; }
    public string  LegalName         { get; set; } = "";
    public string? DisplayName       { get; set; }
    public int?    MemberId          { get; set; }
    public string? MemberName        { get; set; }
    public string  TaxClassification { get; set; } = "";
    public bool    Is1099Tracked     { get; set; }
    public string? TinType           { get; set; }
    public string? TinLast4          { get; set; }
    public string  W9Status          { get; set; } = "";
    public bool    IsActive          { get; set; }
}

public class Payee1099Dto : Payee1099ListItemDto
{
    public string? AddressLine1 { get; set; }
    public string? AddressLine2 { get; set; }
    public string? City  { get; set; }
    public string? State { get; set; }
    public string? Zip   { get; set; }
    public string? Email { get; set; }
    public string? Phone { get; set; }
    public string? W9ReceivedDate { get; set; }
    public bool    HasW9Document  { get; set; }
    public string? Notes { get; set; }
}

public class SavePayee1099Request
{
    [Required, MaxLength(200)] public string LegalName { get; set; } = "";
    [MaxLength(200)] public string? DisplayName { get; set; }
    public int? MemberId { get; set; }
    [Required, MaxLength(40)] public string TaxClassification { get; set; } = "Individual";
    public bool Is1099Tracked { get; set; } = true;
    [MaxLength(10)] public string? TinType { get; set; }
    /// <summary>Plain TIN; null = leave unchanged on update. Encrypted server-side.</summary>
    public string? Tin { get; set; }
    [MaxLength(100)] public string? AddressLine1 { get; set; }
    [MaxLength(100)] public string? AddressLine2 { get; set; }
    [MaxLength(60)]  public string? City  { get; set; }
    [MaxLength(2)]   public string? State { get; set; }
    [MaxLength(10)]  public string? Zip   { get; set; }
    [MaxLength(120)] public string? Email { get; set; }
    [MaxLength(40)]  public string? Phone { get; set; }
    [MaxLength(20)]  public string  W9Status { get; set; } = "Missing";
    public DateOnly? W9ReceivedDate { get; set; }
    public bool      IsActive { get; set; } = true;
    public string?   Notes { get; set; }
}
