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";
}
}