using CandidateReviewContracts.BindingModels;
using CandidateReviewContracts.ViewModels;
using CandidateReviewDataModels.Enums;
using CandidateReviewDataModels.Models;
using System.ComponentModel.DataAnnotations;

namespace CandidateReviewDatabaseImplement.Models
{
    public class User : IUserModel
    {
        public int? CompanyId { get; set; }
        [Required]
        public string Surname { get; set; } = string.Empty;
        [Required]
        public string Name { get; set; } = string.Empty;

        public string? LastName { get; set; }
        [Required]
        public string Email { get; set; } = string.Empty;
        [Required]
        public string Password { get; set; } = string.Empty;

        public string? PhoneNumber { get; set; }

        [Required]
        public RoleEnum Role { get; set; }

        public DateTime DateOfBirth { get; set; }

        public int Id { get; set; }
        public virtual Company Company { get; set; }

        public static User? Create(UserBindingModel model)
        {
            if (model == null)
            {
                return null;
            }
            return new User()
            {
                Id = model.Id,
                Surname = model.Surname,
                Name = model.Name,
                LastName = model.LastName,
                Email = model.Email,
                Password = model.Password,
                PhoneNumber = model.PhoneNumber,
                Role = model.Role,
                CompanyId = model.CompanyId,
                DateOfBirth = model.DateOfBirth.ToUniversalTime().AddHours(4)
            };
        }
        public static User Create(UserViewModel model)
        {
            return new User
            {
                Id = model.Id,
                Surname = model.Surname,
                Name = model.Name,
                LastName = model.LastName,
                Email = model.Email,
                Password = model.Password,
                PhoneNumber = model.PhoneNumber,
                Role = model.Role,
                CompanyId = model.CompanyId,
                DateOfBirth = model.DateOfBirth
            };
        }
        public void Update(UserBindingModel model)
        {
            if (model == null)
            {
                return;
            }
            Surname = model.Surname;
            Name = model.Name;
            LastName = model.LastName;
            Email = model.Email;
            PhoneNumber = model.PhoneNumber;
            CompanyId = model.CompanyId;
            DateOfBirth = model.DateOfBirth.ToUniversalTime().AddHours(4);
        }

        public UserViewModel GetViewModel => new()
        {
            Id = Id,
            Name = Name,
            Surname = Surname,
            LastName = LastName,
            Email = Email,
            Password = Password,
            PhoneNumber = PhoneNumber,
            Role = Role,
            CompanyId = CompanyId,
            DateOfBirth = DateOfBirth
        };
    }
}