using System;
using System.ComponentModel.DataAnnotations;
using System.Data.Linq;
using System.ServiceModel.DomainServices.Server;

namespace TaskIt.Web.Models
{
    // The MetadataTypeAttribute identifies ContactMetadata as the class
    // that carries additional metadata for the Contact class.
    [MetadataType(typeof (ContactMetadata))]
    public class Contact
    {
        // This class allows you to attach custom attributes to properties
        // of the Contact class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }

        #region Nested type: ContactMetadata

        internal sealed class ContactMetadata
        {
            // Metadata classes are not meant to be instantiated.
            private ContactMetadata()
            {
            }

            public EntitySet<ContactNote> ContactNotes { get; set; }

            public DateTime CreatedDate { get; set; }

            public string Email { get; set; }

            public long ID { get; set; }

            public DateTime ModifiedDate { get; set; }

            public string Name { get; set; }

            public EntitySet<Task> Tasks { get; set; }

            public long UserID { get; set; }

            public string Username { get; set; }
        }

        #endregion
    }

    // The MetadataTypeAttribute identifies ContactNoteMetadata as the class
    // that carries additional metadata for the ContactNote class.
    [MetadataTypeAttribute(typeof (ContactNoteMetadata))]
    public class ContactNote
    {
        // This class allows you to attach custom attributes to properties
        // of the ContactNote class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }

        #region Nested type: ContactNoteMetadata

        internal sealed class ContactNoteMetadata
        {
            // Metadata classes are not meant to be instantiated.
            private ContactNoteMetadata()
            {
            }

            public Contact Contact { get; set; }

            public long ContactID { get; set; }

            public DateTime CreatedDate { get; set; }

            public long ID { get; set; }

            public TaskItUser TaskItUser { get; set; }

            public string Text { get; set; }

            public long UserID { get; set; }
        }

        #endregion
    }

    // The MetadataTypeAttribute identifies ContextMetadata as the class
    // that carries additional metadata for the Context class.
    [MetadataTypeAttribute(typeof (ContextMetadata))]
    public class Context
    {
        // This class allows you to attach custom attributes to properties
        // of the Context class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }

        #region Nested type: ContextMetadata

        internal sealed class ContextMetadata
        {
            // Metadata classes are not meant to be instantiated.
            private ContextMetadata()
            {
            }

            public EntitySet<ContextNote> ContextNotes { get; set; }

            public DateTime CreatedDate { get; set; }

            public long ID { get; set; }

            public DateTime ModifiedDate { get; set; }

            public string Name { get; set; }

            public EntitySet<Task> Tasks { get; set; }

            public long UserID { get; set; }
        }

        #endregion
    }

    // The MetadataTypeAttribute identifies ContextNoteMetadata as the class
    // that carries additional metadata for the ContextNote class.
    [MetadataTypeAttribute(typeof (ContextNoteMetadata))]
    public class ContextNote
    {
        // This class allows you to attach custom attributes to properties
        // of the ContextNote class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }

        #region Nested type: ContextNoteMetadata

        internal sealed class ContextNoteMetadata
        {
            // Metadata classes are not meant to be instantiated.
            private ContextNoteMetadata()
            {
            }

            public Context Context { get; set; }

            public long ContextID { get; set; }

            public DateTime CreatedDate { get; set; }

            public long ID { get; set; }

            public TaskItUser TaskItUser { get; set; }

            public string Text { get; set; }

            public long UserID { get; set; }
        }

        #endregion
    }

    // The MetadataTypeAttribute identifies PriorityMetadata as the class
    // that carries additional metadata for the Priority class.
    [MetadataTypeAttribute(typeof (PriorityMetadata))]
    public class Priority
    {
        // This class allows you to attach custom attributes to properties
        // of the Priority class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }

        #region Nested type: PriorityMetadata

        internal sealed class PriorityMetadata
        {
            // Metadata classes are not meant to be instantiated.
            private PriorityMetadata()
            {
            }

            public long ID { get; set; }

            public string Name { get; set; }

            public Priority Priority1 { get; set; }

            public Priority Priority2 { get; set; }

            public EntitySet<Task> Tasks { get; set; }
        }

        #endregion
    }

    // The MetadataTypeAttribute identifies ProjectMetadata as the class
    // that carries additional metadata for the Project class.
    [MetadataTypeAttribute(typeof (ProjectMetadata))]
    public class Project
    {
        // This class allows you to attach custom attributes to properties
        // of the Project class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }

        #region Nested type: ProjectMetadata

        internal sealed class ProjectMetadata
        {
            // Metadata classes are not meant to be instantiated.
            private ProjectMetadata()
            {
            }

            public DateTime? CompletionDate { get; set; }

            public DateTime CreatedDate { get; set; }

            public DateTime? DueDate { get; set; }

            public long ID { get; set; }

            public DateTime ModifiedDate { get; set; }

            public string Name { get; set; }

            public long? ParentID { get; set; }

            public EntitySet<ProjectNote> ProjectNotes { get; set; }

            public EntitySet<Task> Tasks { get; set; }

            public long UserID { get; set; }
        }

        #endregion
    }

    // The MetadataTypeAttribute identifies ProjectNoteMetadata as the class
    // that carries additional metadata for the ProjectNote class.
    [MetadataTypeAttribute(typeof (ProjectNoteMetadata))]
    public class ProjectNote
    {
        // This class allows you to attach custom attributes to properties
        // of the ProjectNote class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }

        #region Nested type: ProjectNoteMetadata

        internal sealed class ProjectNoteMetadata
        {
            // Metadata classes are not meant to be instantiated.
            private ProjectNoteMetadata()
            {
            }

            public DateTime CreatedDate { get; set; }

            public long ID { get; set; }

            public Project Project { get; set; }

            public long ProjectID { get; set; }

            public TaskItUser TaskItUser { get; set; }

            public string Text { get; set; }

            public long UserID { get; set; }
        }

        #endregion
    }

    // The MetadataTypeAttribute identifies TaskMetadata as the class
    // that carries additional metadata for the Task class.
    [MetadataTypeAttribute(typeof (TaskMetadata))]
    public class Task
    {
        // This class allows you to attach custom attributes to properties
        // of the Task class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }

        #region Nested type: TaskMetadata

        internal sealed class TaskMetadata
        {
            // Metadata classes are not meant to be instantiated.
            private TaskMetadata()
            {
            }

            public DateTime? CompletionDate { get; set; }

            public Contact Contact { get; set; }

            public long ContactID { get; set; }

            public Context Context { get; set; }

            public long ContextID { get; set; }

            public DateTime CreatedDate { get; set; }

            public string Description { get; set; }

            public DateTime? DueDate { get; set; }

            public long ID { get; set; }

            public DateTime ModifiedDate { get; set; }

            public string Name { get; set; }

            public Priority Priority { get; set; }

            public long PriorityID { get; set; }

            public Project Project { get; set; }

            public long ProjectID { get; set; }

            public TaskCategory TaskCategory { get; set; }

            public long TaskCategoryID { get; set; }

            public EntitySet<TaskNote> TaskNotes { get; set; }

            public long UserID { get; set; }
        }

        #endregion
    }

    // The MetadataTypeAttribute identifies TaskCategoryMetadata as the class
    // that carries additional metadata for the TaskCategory class.
    [MetadataTypeAttribute(typeof (TaskCategoryMetadata))]
    public class TaskCategory
    {
        // This class allows you to attach custom attributes to properties
        // of the TaskCategory class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }

        #region Nested type: TaskCategoryMetadata

        internal sealed class TaskCategoryMetadata
        {
            // Metadata classes are not meant to be instantiated.
            private TaskCategoryMetadata()
            {
            }

            public long ID { get; set; }

            public string Name { get; set; }

            public EntitySet<Task> Tasks { get; set; }
        }

        #endregion
    }

    // The MetadataTypeAttribute identifies TaskItUserMetadata as the class
    // that carries additional metadata for the TaskItUser class.
    [MetadataTypeAttribute(typeof (TaskItUserMetadata))]
    public class TaskItUser
    {
        // This class allows you to attach custom attributes to properties
        // of the TaskItUser class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }

        #region Nested type: TaskItUserMetadata

        internal sealed class TaskItUserMetadata
        {
            // Metadata classes are not meant to be instantiated.
            private TaskItUserMetadata()
            {
            }

            public EntitySet<ContactNote> ContactNotes { get; set; }

            public EntitySet<ContextNote> ContextNotes { get; set; }

            public DateTime CreatedDate { get; set; }

            public string Email { get; set; }

            public string FacebookPassword { get; set; }

            public string FacebookUsername { get; set; }

            public string FirstName { get; set; }

            public long ID { get; set; }

            public string LastName { get; set; }

            public DateTime ModifiedDate { get; set; }

            public string Password { get; set; }

            public EntitySet<ProjectNote> ProjectNotes { get; set; }

            public EntitySet<TaskNote> TaskNotes { get; set; }

            public string TwitterPassword { get; set; }

            public string TwitterUsername { get; set; }

            public string Username { get; set; }
        }

        #endregion
    }

    // The MetadataTypeAttribute identifies TaskNoteMetadata as the class
    // that carries additional metadata for the TaskNote class.
    [MetadataTypeAttribute(typeof (TaskNoteMetadata))]
    public class TaskNote
    {
        // This class allows you to attach custom attributes to properties
        // of the TaskNote class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }

        #region Nested type: TaskNoteMetadata

        internal sealed class TaskNoteMetadata
        {
            // Metadata classes are not meant to be instantiated.
            private TaskNoteMetadata()
            {
            }

            public DateTime CreatedDate { get; set; }

            public long ID { get; set; }

            public Task Task { get; set; }

            public long TaskID { get; set; }

            public TaskItUser TaskItUser { get; set; }

            public string Text { get; set; }

            public long UserID { get; set; }
        }

        #endregion
    }
}