using System;
using System.Dynamic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;


namespace AlfredoLotar.Livro.Aspnet.SchoolModel
{
    [MetadataType(typeof(PersonMetadata))]
    [ScaffoldTable(true)]
    public partial class Person
    {
        partial void OnFirstNameChanging(string value)
        {
            if (Char.IsLower(value[0]))
            {
                throw new ValidationException("A primeira letra do nome deve ser maiúscula.");
            }
        }
    }

    public class PersonMetadata
    {
        [ScaffoldColumn(true)]
        [DataType(DataType.Date)]  
        //[DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}")]
        public object EnrollmentDate { get; set; }

        [ScaffoldColumn(true)]
        [DataType(DataType.Date)]
        public object HireDate { get; set; }

        [DisplayName("Nome")]
        [Required(AllowEmptyStrings=false, ErrorMessage="O nome é obrigatório.")]
        [StringLength(50)]
        public object FirstName { get; set; }
        
        [DisplayName("SobreNome")]
        public object LastName { get; set; }         
    }

    [MetadataType(typeof(DepartmentMetadata))]
    [ScaffoldTable(true)]
    public partial class Department
    {

    }

    public class DepartmentMetadata
    {
        [DisplayFormat(DataFormatString = "{0:c}")]
        public object Budget { get; set; }
    }

    [MetadataType(typeof(CourseMetadata))]
    [ScaffoldTable(true)]
    public partial class Course
    {

    }

    public class CourseMetadata
    {
        [Range(1, 8, ErrorMessage = "O número de créditos deve ser entre 0 e 8.")]
        [RegularExpression("^[0-9]{0,8}$", ErrorMessage = "O número de créditos deve ser entre 0 e 8.")]
        public object Credits { get; set; }
    }
    

    [MetadataType(typeof(StudentGradeMetadata))]
    [ScaffoldTable(true)]
    public partial class StudentGrade
    {

    }

    public class StudentGradeMetadata
    {

    }
}
