using System.ComponentModel.DataAnnotations;
using SushiBarContracts.BindingModels;
using SushiBarContracts.ViewModels;
using SushiBarDataModels.Models;

namespace SushiBarDatabaseImplement.Models;

public class Client : IClientModel
{
    public int Id { get; private init; }
    [Required]
    public string ClientFio { get; private set; } = string.Empty;
    [Required]
    public string Email { get; private set; } = string.Empty;
    [Required]
    public string Password { get; private set; } = string.Empty;

    public static Client? Create(ClientBindingModel? model)
    {
        if (model == null) return null;
        return new Client
        {
            Id = model.Id,
            ClientFio = model.ClientFio,
            Email = model.Email,
            Password = model.Password
        };
    }

    public static Client Create(ClientViewModel model)
    {
        return new Client
        {
            Id = model.Id,
            ClientFio = model.ClientFio,
            Email = model.Email,
            Password = model.Password
        };
    }

    public void Update(ClientBindingModel? model)
    {
        if (model == null) return;
        ClientFio = model.ClientFio;
        Email = model.Email;
        Password = model.Password;
    }

    public ClientViewModel GetViewModel => new()
    {
        Id = Id,
        ClientFio = ClientFio,
        Email = Email,
        Password = Password
    };
}