using System.ComponentModel.DataAnnotations;
using System.Text;
using ApplicationLayer.Services.Applicants.Models;
using Domains.VisaApplicationDomain;
namespace ApplicationLayer.Services.VisaApplications.Models;
/// Model of  with applicant property
public class VisaApplicationModel
{
    /// 
    [Required]
    public Guid Id { get; set; }
    /// Applicant of application
    [Required]
    public ApplicantModel Applicant { get; set; } = null!;
    /// 
    [Required]
    public ApplicationStatus Status { get; set; }
    /// 
    public ReentryPermitModel? ReentryPermit { get; set; }
    /// 
    [Required]
    public string DestinationCountry { get; set; } = null!;
    /// 
    [Required]
    public List PastVisas { get; set; } = null!;
    /// 
    public PermissionToDestCountryModel? PermissionToDestCountry { get; set; }
    [Required] public List PastVisits { get; set; } = null!;
    /// 
    [Required]
    public VisaCategory VisaCategory { get; set; }
    /// 
    [Required]
    public bool ForGroup { get; set; }
    /// 
    [Required]
    public RequestedNumberOfEntries RequestedNumberOfEntries { get; set; }
    /// 
    [Required]
    public DateTime RequestDate { get; set; }
    /// 
    [Required]
    public int ValidDaysRequested { get; set; }
    public string ForGroupToString() => ForGroup ? "For group" : "Individual";
    public string PastVisasToString()
    {
        var stringBuilder = new StringBuilder();
        foreach (var visa in PastVisas)
        {
            stringBuilder.AppendLine($"{visa.Name} issued at {visa.IssueDate.ToShortDateString()} and valid for {visa.ExpirationDate.ToShortDateString()}");
        }
        return stringBuilder.ToString();
    }
    public string PastVisitsToString()
    {
        var stringBuilder = new StringBuilder();
        foreach (var visit in PastVisits)
        {
            stringBuilder.AppendLine($"Visit to {visit.DestinationCountry} started at {visit.StartDate.ToShortDateString()} and ends {visit.EndDate.ToShortDateString()}");
        }
        return stringBuilder.ToString();
    }
    public string PermissionToDestCountryToString()
    {
        return VisaCategory is VisaCategory.Transit
            ? $"Issued by{PermissionToDestCountry!.Issuer}, expires at {PermissionToDestCountry.ExpirationDate.ToShortDateString()}"
            : "Non-transit";
    }
}