using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace OnlineAssessment.Domain.ViewModels
{
    public class PracticeAttemptViewModel 
    {
        public int attempt_id { get; set; }
        public int practice_id { get; set; }
        public string instruction { get; set; }
        public string attempt_status { get; set; } 
        public int attempt_started_by { get; set; }
        public DateTime attempt_started_on { get; set; }
        public int total_questions { get; set; }
        public string topic_name { get; set; }
    }

    public class PracticeAttemptAllPracticePagedModel
    {
        public int total_count { get; set; }
        public int total_pages { get; set; }
        public int page_index { get; set; }
        public bool next { get; set; } 
        public bool previous { get; set; }
        public List<PracticeAttemptAllPracticeModel> practices { get; set; }
    }

    public class PracticeAttemptsPagedModel
    {
        public int total_count { get; set; }
        public int total_pages { get; set; }
        public int page_index { get; set; }
        public bool next { get; set; }
        public bool previous { get; set; }
        public List<PracticeAttemptsModel> practices { get; set; }
    }
    public class PracticeAttemptAllPracticeModel
    {
        public int id { get; set; }
        public int institute_id { get; set; }
        public int author_id { get; set; }
        public string author_name { get; set; }
        public string name { get; set; }
        public string image { get; set; }
        public string module { get; set; }
        public int module_id { get; set; }
        public string module_name { get; set; }
        public int practicetype_id { get; set; }
        public string language_code { get; set; }
        public string practice_status { get; set; }
        public int attempt_count { get; set; }
        public short points_needed { get; set; }
        public short points_available { get; set; }
        public bool isSubscribed { get; set; }
        public int bookmark_count { get; set; }
        public short complexity { get; set; }
        public DateTime start_date { get; set; }
        public int total_questions { get; set; }
        public DateTime created_on { get; set; }
        public DateTime updated_on { get; set; }
        public bool isActive { get; set; }
    }

    public class PracticeAttemptsModel
    {
        public int id { get; set; }
        public int practice_id { get; set; }
        public string name { get; set; }
        public string image { get; set; }
        public int topic_id { get; set; }
        public string topic_name { get; set; }
        public string language_code { get; set; }
        public string practice_status { get; set; }
        public int? correct_count { get; set; }
        public int? incorrect_count { get; set; }
        public int? unattempted_count { get; set; }
        public short complexity { get; set; }
        public DateTime? attempted_on { get; set; }
        public short points_needed { get; set; }
        public short points_available { get; set; }
        public bool isSubscribed { get; set; }
        public bool isActive { get; set; }
    }


    public class PracticeAttemptQuestionAnswerViewModel
    {
        [Key]
        public int question_id { get; set; }
        [Required]
        public int answer_duration { get; set; }
        public bool is_visited { get; set; }
        public List<PracticeAttemptOptionsSelectedViewModel> answers { get; set; }
    }

    public class PracticeAttemptOptionsSelectedViewModel
    {
        public int id { get; set; }
    }

/*
    public class PracticeAttemptAllQuestionsViewModel
    {
        public int practice_id { get; set; }
        public string practice_name { get; set; }
        public int practice_language { get; set; }
        public PracticeAttemptQuestionsViewModel questions { get; set; }
    }
*/
    public class PracticeAttemptQuestionOptionViewModel
    {
        public int id { get; set; }
        public string text { get; set; }
        public bool isSelected { get; set; }
        public bool isCorrect { get; set; }
    }

    public class PracticeAttemptAllQuestionsViewModel
    {
        public int id { get; set; }
        public int practice_id { get; set; }
        public string practice_name { get; set; }
        public string language { get; set; }
        public int language_id { get; set; }
        public string module { get; set; }
        public string module_name { get; set; }
        public int module_id { get; set; }
        public int total_questions { get; set; }
        public List<PracticeAttemptQuestionsViewModel> questions { get; set; }
    }

    public class PracticeAttemptQuestionsViewModel
    {
        public int id { get; set; }
        public int language_id { get; set; }
        public string language_code { get; set; }
        public string question_text { get; set; }
        public string type_code { get; set; }
        public short? complexity_code { get; set; }
        public string type_text { get; set; }
        public List<int> correct_option_ids { get; set; }
        public string answer_explanation { get; set; }
        public bool isVisited { get; set; }
        public List<PracticeAttemptQuestionOptionViewModel> options { get; set; }
    }

    public class PracticeDetailViewModel
    {
        public int practice_id { get; set; }
        public string practice_name { get; set; }
        public string instruction { get; set; }
        public int total_questions { get; set; }
        public int total_plays { get; set; }
        public int total_likes { get; set; }
        public bool isLiked { get; set; }
        public int points_needed { get; set; }
        public int points_available { get; set; }
        public bool isSubscribed { get; set; }
        public int author_id { get; set; }
        public string author_name { get; set; }
        public string author_image { get; set; }
    }

    /*
        public class PracticeAttemptReportViewModel
        {
            public int practice_id { get; set; }
            public string practice_name { get; set; }
            public int practice_language { get; set; }
            public string module { get; set; }
            public string module_name { get; set; }
            public int module_id { get; set; }
            public int total_questions { get; set; }
            public int total_correct { get; set; }        
            public List<PracticeAttemptQuestionReportViewModel> qns_report { get; set; }
        }

        public class PracticeAttemptQuestionReportViewModel
        {
            public int id { get; set; }
            public int language_id { get; set; }
            public string language_code { get; set; }
            public string question_text { get; set; }
            public string type_code { get; set; }
            public string type_text { get; set; }
            public string topic { get; set; }
            public short complexity_code { get; set; }
            public double? correct_marks { get; set; }
            public double? wrong_marks { get; set; }
            public bool isAttempted { get; set; }
            public bool isCorrect { get; set; }
            public List<PracticeAttemptOptionReportViewModel> options { get; set; }
        }

        public class PracticeAttemptOptionReportViewModel
        {
            public int id { get; set; }
            public string text { get; set; }
            public bool isCorrect { get; set; }
            public bool isSelected { get; set; }
        }
    */
    public class PracticeAttemptResultModel
    {
        [Required]
        public int correct_count { get; set; }
        [Required]
        public int incorrect_count { get; set; }
        [Required]
        public int unattempted_count { get; set; }
        public int expired_count { get; set; }
        [Required]
        public int total_duration { get; set; }

    }

    public class QuestionBugModel
    {
        [Required]
        public int question_id { get; set; }
        [Required]
        public string source { get; set; }
        [Required]
        public string title { get; set; }
        public string description { get; set; }        
    }

    public class BookMarkStatus
    {
        [Required]
        public bool isBookmark { get; set; }
    }

    public class CorrectnessCount
    {
        public int nCorrect { get; set; }
        public int nIncorrect { get; set; }
    }

    public class PracticeAttemptsCoverageViewModel
    {
        public int total_topics { get; set; }
        public int total_practices { get; set; }
        public int topics_covered { get; set; }
        public int practices_covered { get; set; }
    }

}
