using System.ComponentModel.DataAnnotations;

namespace AsbCloudApp.Data
{
    /// <summary>
    /// DTO пользователя платформы
    /// </summary>
    public class UserDto : IId
    {
        /// <inheritdoc/>
        public int Id { get; set; }

        /// <summary>
        /// логин
        /// </summary>
        [Required(ErrorMessage = "Логин не должен быть пустым")]
        [StringLength(50, MinimumLength = 1, ErrorMessage = "Допустимая длина логина от 1 до 50 символов")]
        public string Login { get; set; } = null!;

        /// <summary>
        /// Имя
        /// </summary>
        [StringLength(50, MinimumLength = 0, ErrorMessage = "Допустимая длина имени от 1 до 50 символов")]
        public string? Name { get; set; }

        /// <summary>
        /// Фамилия
        /// </summary>
        [StringLength(50, MinimumLength = 0, ErrorMessage = "Допустимая длина фамилии от 1 до 50 символов")]
        public string? Surname { get; set; }

        /// <summary>
        /// Отчество
        /// </summary>
        [StringLength(50, MinimumLength = 0, ErrorMessage = "Допустимая длина отчества от 1 до 50 символов")]
        public string? Patronymic { get; set; }

        /// <summary>
        /// Email
        /// </summary>
        [Required]
        [StringLength(260, MinimumLength = 1, ErrorMessage = "Допустимая длина email от 1 до 260 символов")]
        public string Email { get; set; } = null!;

        /// <summary>
        /// Phone
        /// </summary>
        [StringLength(50, MinimumLength = 1, ErrorMessage = "Допустимая длина телефона от 1 до 50 символов")]
        public string? Phone { get; set; }

        /// <summary>
        /// Должность
        /// </summary>
        [StringLength(100, MinimumLength = 1, ErrorMessage = "Допустимая длина должности от 1 до 100 символов")]
        public string? Position { get; set; }

        /// <summary>
        /// Id компании
        /// </summary>
        [Required]
        public int IdCompany { get; set; }

        /// <summary>
        /// Id состояния пользователя
        /// </summary>
        public short? IdState { get; set; }

        /// <summary>
        /// DTO компании
        /// </summary>
        public CompanyDto? Company { get; set; }

        /// <summary>
        /// Получение отображаемого имени
        /// </summary>
        /// <returns></returns>
        public string MakeDisplayName()
        {
            if (string.IsNullOrEmpty(Surname))
                return Login;

            var s = Surname;
            if (!string.IsNullOrEmpty(Name))
            {
                s += $"{Name[0]}.";
                if (!string.IsNullOrEmpty(Patronymic))
                    s += $" {Patronymic[0]}.";
            }

            return s;
        }
    }
}