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

    using Castle.ActiveRecord;

    /// <summary>
    /// Должность
    /// </summary>
    [ActiveRecord("Position", Schema = "dbo", UseAutoImport = false), DisplayName("Тип устройства"), DisplayColumn("Value")]
    public class Position : ActiveRecordBase
    {
        #region Свойства
        /// <summary>
        /// Ключ
        /// </summary>
        [Key, PrimaryKey(PrimaryKeyType.Native, Column = "PositionId"), DisplayName("Id")]
        public int Id { get; set; }

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

        /// <summary>
        /// Сотрудники
        /// </summary>
        [HasMany(MapType = typeof(Employee), ColumnKey = "EmployeeId", Lazy = true, ExtraLazy = true), DisplayName("Сотрудники")]
        public IList<Employee> Employees { get; set; }
        #endregion

        #region Общие методы
        /// <summary>
        /// Возвращает все записи
        /// </summary>
        public static List<Position> FindAll()
        {
            //using (new Castle.ActiveRecord.TransactionScope(TransactionMode.New))
            return new List<Position>((Position[])ActiveRecordMediator.FindAll(typeof(Position)));
        }

        /// <summary>
        /// Возвращает все записи по значению
        /// </summary>
        /// <param name="value">Значение</param>
        public static List<Position> FindAll(string value)
        {
            return new List<Position>(ActiveRecordMediator<Position>.FindAllByProperty("Value", value));
        }

        /// <summary>
        /// Возвращает запись по её Id
        /// </summary>
        /// <param name="id">Id записи в БД</param>
        public static Position Find(int id)
        {
            return ActiveRecordMediator<Position>.FindByPrimaryKey(id, false);
        }
        #endregion
    }
}
