using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

namespace OnlineAssessment.Domain.ViewModels
{

    public class UserViewAllPagedModel
    {
        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<UserViewModel> users { get; set; }
    }

    public class TeacherViewAllPagedModel
    {
        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<TeacherViewModel> users { get; set; }
    }

    public partial class TeacherViewModel
    {
        public int id { get; set; }
        public string name { get; set; }
        public string bio { get; set; }
        public int total_practices { get; set; }
        public int total_exams { get; set; }
        public int total_likes { get; set; }
        public int total_plays { get; set; }

    }

    public partial class UserViewModel
    {
        public int id { get; set; }

        public int institute_id { get; set; }
        public string role { get; set; }
        public string language_code { get; set; }

        public int? registration_id { get; set; }

        public DateTime? registration_from { get; set; }

        public string first_name { get; set; }

        public string last_name { get; set; }

        public DateTime? dob { get; set; }

        public string gender { get; set; }

        public string email_id { get; set; }

        public string mobile_no { get; set; }

        public string photo { get; set; }
        public DateTime? craeted_on { get; set; }

        public DateTime? updated_on { get; set; }

        public bool? isActive { get; set; }

        public bool? isDeleted { get; set; }
    }

    public partial class LoginViewModel
    {
        public int id { get; set; }
        public string email_id { get; set; }
        public string mobile_num { get; set; }
        public int role_id { get; set; }
        public string role_name { get; set; }
        public int institute_id { get; set; }
        public string institute_name { get; set; }
        public string institute_logo { get; set; }
        public string language_code { get; set; }
        public string first_name { get; set; }
        public string last_name { get; set; }
        public string gender { get; set; }
        public string state { get; set; }
        public string city { get; set; }
        public int? batch_id { get; set; }
        public string batch_name { get; set; }
        public string current_plan_code { get; set; }
        public string current_plan_name { get; set; }
        public bool? IsActive { get; set; }
        public bool? IsDeleted { get; set; }
    }


    public partial class UserAddModel
    {
        [Required]
        public int RoleId { get; set; }

        [Required]
        public int InstituteId { get; set; }

        [Required]
        public int LanguageId { get; set; }

        public int? RegistrationId { get; set; }

        public DateTime? RegistrationDatetime { get; set; }

        [Required]
        public string FirstName { get; set; }

        public string LastName { get; set; }

        public DateTime? DateOfBirth { get; set; }

        public string Gender { get; set; }

        [Required]
        public string EmailId { get; set; }

        public string MobileNo { get; set; }

        public string Photo { get; set; }

        public string Address { get; set; }

        public string City { get; set; }

        public int? StateId { get; set; }

        public string PinCode { get; set; }

        public string Latitude { get; set; }

        public string Longitude { get; set; }

        [Required]
        public string UserPassword { get; set; }
    }

    public class UserEditModel
    {
        [Required]
        public int Id { get; set; }

        public int RoleId { get; set; }

        public int InstituteId { get; set; }

        public int LanguageId { get; set; }

        public int? RegistrationId { get; set; }

        public DateTime? RegistrationDatetime { get; set; }

        public string FirstName { get; set; }

        public string LastName { get; set; }

        public DateTime? DateOfBirth { get; set; }

        public string Gender { get; set; }

        //public string EmailId { get; set; }

        public string MobileNo { get; set; }

        public string Photo { get; set; }

        public string Address { get; set; }

        public string City { get; set; }

        public int? StateId { get; set; }

        public string PinCode { get; set; }

        public string Latitude { get; set; }

        public string Longitude { get; set; }

        public string UserPassword { get; set; }
        public bool IsActive { get; set; }
    }
    public partial class UserLogin
    {
        [Required]
        public string EmailId { get; set; }

        [Required]
        public string UserPassword { get; set; }
    }

    //=================================================

    public partial class RegDetail
    {
        public string scheme { get; set; }
        public string host { get; set; }
        public string port { get; set; }
    }


    public class UserRegistrationModel
    {
        public string FirstName { get; set; }            // Student's First Name
        public string LastName { get; set; }             // Student's Last Name
        public string Email { get; set; }                // Student's Email
        public string Phone { get; set; }                // Student's Phone Number
        public DateTime? DateOfBirth { get; set; }       // Student's Date of Birth
        public string Gender { get; set; }               // "male", "female", or "other"

        public string GuardianName { get; set; }         // Guardian's Name
        public string GuardianContact { get; set; }      // Guardian's Phone Number

        public DateTime? AdmissionDate { get; set; }     // Date of Admission
        public string Class { get; set; }                // Class / Grade (e.g., "10th")
        public string AcademicYear { get; set; }         // Academic Year (e.g., "2024-25")
        public string RollNumber { get; set; }           // Unique Roll Number or ID
    }

    public partial class StudentAddModel
    {
        [Required] [EmailAddress]
        public string EmailId { get; set; }

        [Required] [StringLength(16, MinimumLength = 6)]
        public string UserPassword { get; set; }
       
    }

    public partial class SignUpRequestModel
    {
        [Required] [EmailAddress]
        public string Email { get; set; }

        [Required] [StringLength(16, MinimumLength = 6)]
        public string Password { get; set; }

        [Required] [StringLength(16, MinimumLength = 4)]
        public string Name  { get; set; }
       
    }

    public partial class SignupUserModel
    {
        [Required]
        [EmailAddress]
        public string Email { get; set; }

        [Required]
        [StringLength(16, MinimumLength = 1)]
        public string FirstName { get; set; }
        
        [StringLength(16, MinimumLength = 1)]
        public string LastName { get; set; }

    }


    public partial class UpdateUserModel
    {
        [Required]
        public int user_id { get; set; }
        [StringLength(16, MinimumLength = 1)]
        public string FirstName { get; set; }
        [StringLength(16, MinimumLength = 1)]
        public string LastName { get; set; }
        public int gender { get; set; }
        public DateTime? DateOfBirth { get; set; }       // Student's Date of Birth
        public string GuardianName { get; set; }         // Guardian's Name
        public string Guardian_relation { get; set; }         // Guardian's Name
        public string GuardianContact { get; set; }      // Guardian's Phone Number


        public string Street { get; set; }
        public string City { get; set; }
        public string Zip { get; set; }
        public int? StateId { get; set; }
        public int? CountryId { get; set; }
    }


    public partial class SignInRequest
    {
        [Required] [EmailAddress]
        public string Email { get; set; }

        [Required] [StringLength(16, MinimumLength = 6)]
        public string Password { get; set; }  
    }

    public partial class DisplayName
    {
        [Required]
        [StringLength(20, MinimumLength = 2)]
        public string Name { get; set; }
    }

    public partial class AttendanceRequest
    {
        [Required]
        public int userId { get; set; } // Odoo's Employee ID
       
        [Required]
        public DateTime date { get; set; }
    }

    public class AttendanceRequestList
    {
        public List<int> EmployeeIds { get; set; }
        public DateTime FromDate { get; set; }
        public DateTime ToDate { get; set; }
    }
    
    public class CalendarMeetingRequest
    {
        [Required]
        public string Subject { get; set; }
        [Required]
        public DateTime StartTime { get; set; }
        [Required]
        public DateTime EndTime { get; set; }
        public string Location { get; set; }
        public string Description { get; set; }
        public int ReminderMinutes { get; set; }
    }

    public class CalendarRequestList
    {
        public DateTime FromDate { get; set; } // Start date of the range
        public DateTime ToDate { get; set; } // End date of the range
    }

    public class CalendarRecordList
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Start { get; set; } // Consider DateTime if properly formatted
        public string Stop { get; set; }
        public int UserId { get; set; }
        public List<int> PartnerIds { get; set; } = new List<int>();
    }


    public class CalendarRequest
    {
        public string Title { get; set; }
        public DateTime StartTime { get; set; }
        public DateTime EndTime { get; set; }
        public string Location { get; set; }
        public string Description { get; set; }
    }

    public class UpdateMeetingRequest
    {
        [Required]
        public int MeetingId { get; set; }  // Required: ID of the meeting to be updated
        public string Title { get; set; }
        public DateTime StartTime { get; set; }
        public DateTime EndTime { get; set; }
        public string Location { get; set; }
        public string Description { get; set; }
    }


    public partial class ProfileDetailView
    {
        [StringLength(20)]
        public string FirstName { get; set; }
        [StringLength(20)]
        public string LastName { get; set; }
        [StringLength(7)]
        public string Gender { get; set; }
        [StringLength(2)]
        public string State { get; set; }
        [StringLength(20)]
        public string City { get; set; }


    }

    public partial class DefaultGroup
    {
        [Required]
        public bool isDefault { get; set; }

    }

    public partial class AddAdminTeacherModel
    {
        [Required] [EmailAddress]
        public string emailId { get; set; }
        [Required] 
        public int roleId { get; set; }

    }

    public partial class VerifyPaymentView
    {
        [Required]
        public string payment_id { get; set; }

        [Required]
        public string order_id { get; set; }

        [Required]
        public string signature { get; set; }
    }
}
