namespace ServiceCenter.Data.DapperNet
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.ComponentModel.DataAnnotations;

    using Contrib = Dapper.Contrib.Extensions;

    /// <summary>
    /// Сотрудник
    /// </summary>
    [Contrib.Table("Employee"), DisplayName("Сотрудник"), DisplayColumn("FullName")]
    public class Employee
    {
        /// <summary>
        /// Ключ
        /// </summary>
        [DisplayName("Id"), Contrib.Key]
        public int EmployeeId { get; set; }

        /// <summary>
        /// Имя
        /// </summary>
        [DisplayName("Имя"),
        DisplayFormat(NullDisplayText = "Наименование не может быть пустым"), 
        Required(ErrorMessage = "Имя не может быть пустым"), 
        DataType(DataType.Text), 
        StringLength(50, ErrorMessage = "Максимум 50 символов")]
        public string Name { get; set; }

        /// <summary>
        /// Фамилия
        /// </summary>
        [DisplayName("Фамилия"), 
        DataType(DataType.Text), 
        StringLength(50, ErrorMessage = "Максимум 50 символов")]
        public string SurName { get; set; }

        /// <summary>
        /// Отчество
        /// </summary>
        [DisplayName("Отчество"), 
        DataType(DataType.Text), 
        StringLength(50, ErrorMessage = "Максимум 50 символов")]
        public string MidName { get; set; }

        /// <summary>
        /// Должность
        /// </summary>
        [DisplayName("Должность")]
        public int PositionId { get; set; }

        /// <summary>
        /// Должность
        /// </summary>
        [DisplayName("Должность"), Contrib.Computed]
        public Position Position { get; set; }

        /// <summary>
        /// Полное имя
        /// </summary>
        [DisplayName("Ф.И.О."), Contrib.Computed]
        public string FullName
        {
            get
            {
                string fullName = this.Name;

                if (!string.IsNullOrEmpty(this.SurName) && !string.IsNullOrEmpty(this.MidName))
                    fullName = string.Format("{0} {1}.{2}.", this.SurName, this.Name[0], this.MidName[0]);
                else if (!string.IsNullOrEmpty(this.SurName))
                    fullName = string.Format("{0} {1}", this.SurName, this.Name);

                return fullName;
            }
        }

        /// <summary>
        /// Заявки
        /// </summary>
        [DisplayName("Заявки"), Contrib.Computed]
        public List<Request> Requests { get; set; }
    }
}
