using Microsoft.IdentityModel.Abstractions;
using System.ComponentModel.DataAnnotations;
using System.Security.Cryptography;
using TecniStamp.Domain;

namespace TecniStamp.Model.Commesse;

public class ClienteViewModel : BaseViewModel
{
    [Required(ErrorMessage = "La ragione sociale è obbligatoria")]
    public string RagioneSociale { get; set; }

    [Required(ErrorMessage = "la partita iva è obbligatoria")]
    public string PartitaIva { get; set; }

    [Required(ErrorMessage = "il numero di telefono è obbligatorio")]
    public string Telefono { get; set; }

    [Required(ErrorMessage = "la mail è obbligatoria")]
    [EmailAddress(ErrorMessage = "Formato email non valido")]
    public string Email { get; set; }

    [Required(ErrorMessage = "il CAP è obbligatoria")]
    public string CAP { get; set; }

    [Required(ErrorMessage = "la città è obbligatoria")]
    public string Citta { get; set; }

    [Required(ErrorMessage = "il numero civico è obbligatoria")]
    public string NumeroCivico { get; set; }

    [Required(ErrorMessage = "la via è obbligatoria")]
    public string Via { get; set; }

    [Required(ErrorMessage = "la provincia è obbligatoria")]
    public string Provincia { get; set; }

    public string? Note { get; set; }
    public Guid? ComuneId { get; set; }
    public ComuneIstatViewModel Comune { get; set; }
    
    public override void Validate()
    {
        
    }

    public static implicit operator ClienteViewModel(Cliente model)
    {
        return model == null
            ? null
            : new ClienteViewModel()
            {
                RagioneSociale = model.RagioneSociale,
                PartitaIva = model.PartitaIva,
                Telefono = model.Telefono,
                Email = model.Email,
                CAP = model.CAP,
                Citta = model.Citta,
                NumeroCivico = model.NumeroCivico,
                Via = model.Via,
                Provincia = model.Provincia,
                Note = model.Note,
                ComuneId = model.ComuneId,
                Comune = model.Comune,
                Id = model.Id
            };
    }

    public Cliente Map(Cliente model)
    {
        model.RagioneSociale = RagioneSociale;
        model.PartitaIva = PartitaIva;
        model.Citta = Citta;
        model.Email = Email;
        model.Telefono = Telefono;
        model.Citta = Citta;
        model.CAP = CAP;
        model.Provincia = Provincia;
        model.Via = Via;
        model.NumeroCivico = NumeroCivico;

        return model;
    }
}