from django.shortcuts import redirect, render
from django.contrib.auth import authenticate, login
from django.core.paginator import Paginator
from django.http import JsonResponse
from learn.models import Faculty, Lecture_Topics, Live_Lecture
from django.conf import settings
from django.core.mail import send_mail
import re
import random
from django.utils import timezone
from django.db.models import Prefetch
import json

def faculty_login(request):
    if request.method == 'POST':
        email = request.POST.get('email')
        password = request.POST.get('password')
        regex = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,7}\b'
        if not re.match(regex,email):
            return JsonResponse({'success': False,'message': 'Please enter valid email address'})
        elif(email):
            if(password):
                faculty = Faculty.objects.filter(email=email, password=password).values()
                if faculty.count()>0:
                    faculty_data = list(faculty)
                    request.session['is_logged_in'] = True
                    request.session['faculty_id'] = faculty_data[0]['id']
                    request.session['faculty_name'] = faculty_data[0]['faculty_name']
                    request.session['faculty_email'] = faculty_data[0]['email']
                    request.session['faculty_mobile'] = faculty_data[0]['contact']
                    return JsonResponse({'success': True
                    ,'message': 'Logged in successfully'})
                else:
                    return JsonResponse({'success': False,'message': 'Invalid credentials'})

        return JsonResponse({'success': False,'message': 'Please enter your email & password'})



def sendOTP(request):
      if request.method == 'POST':
        email = request.POST.get('email')
        if(email):
            request.session['faculty_email'] = email
            otp = random.randint(1000,9999)
            request.session['otp'] = otp
            subject = 'Reset password - Crack Every Test'
            message = f'Hi, '+str(otp)+' otp to reset password'
            email_from = settings.EMAIL_HOST_USER
            recipient_list = [email, ]
            faculty = Faculty.objects.filter(email=email)
            if faculty.count() > 0:
                send_mail( subject, message, email_from, recipient_list )
                return JsonResponse({'success': True,'message': 'OTP sent successfully.'})
            else:
                return JsonResponse({'success': False,'message': 'Account not found'})
        else:
            return JsonResponse({'success': False,'message': 'Please enter your email.'})

def processOTP(request):
      if request.method == 'POST':
        otp = request.POST.get('otp')
        if(otp):
            if int(otp) == request.session.get('otp'):
                return JsonResponse({'success': True,'message': 'OTP verified successfully.'})
            else:
                return JsonResponse({'success': False,'message': 'Please enter correct OTP.'})
        else:
            return JsonResponse({'success': False,'message': 'Please enter OTP.'})

def savePassword(request):
      if request.method == 'POST':
        password = request.POST.get('password')
        if(password):
            Faculty.objects.filter(email=request.session.get('foget_email')).update(password=password)
            return JsonResponse({'success': True,'message': 'OTP verified successfully.'})
        else:
            return JsonResponse({'success': False,'message': 'Please enter your password.'})


def login(request):
    return render(request, 'fauth/faculty-login.html',{})
# Create your views here.
def forgetPassword(request):
    return render(request, 'fauth/forget-password.html',{})

def verifyOTP(request):
    return render(request, 'fauth/verify-otp.html',{})

def resetPassword(request):
    return render(request, 'fauth/reset-password.html',{})

def logout(request):
    request.session.flush()
    return redirect('faculty/login')


def facultyDashboard(request):
    return render(request, 'facultyDashboard.html',{})
# def uplcommingLectures(request):
#     id =  request.session.get('faculty_id')
#     faculty=Faculty.objects.get(id=id)
#     today = timezone.now().date()
#     upcommingLectures = Live_Lecture.objects.filter(faculty_id=id, lacture_date__gte=today).order_by('lacture_date')
#     lecture_topics = Lecture_Topics.objects.select_related('topics')
#     upcommingLectures = upcommingLectures.prefetch_related(
#         Prefetch('lecture_topics_set', queryset=lecture_topics, to_attr='related_topics')
#     )

#     # Pagination setup: 10 lectures per page (change as needed)
#     paginator = Paginator(upcommingLectures, 10)
#     page_number = request.GET.get('page')
#     paginated_lectures = paginator.get_page(page_number)
   
#     return render(request, 'upcomming-lecture-list.html', {
#         "faculty":faculty ,
#         "paginated_lectures": paginated_lectures,
#         "upcommingLectures": upcommingLectures
#       })




def uplcommingLectures(request):
    id = request.session.get('faculty_id')
    faculty = Faculty.objects.get(id=id)
    today = timezone.now().date()
    upcommingLectures = Live_Lecture.objects.filter(faculty_id=id, lacture_date__gte=today).order_by('lacture_date')

    lecture_data = []
    for lec in upcommingLectures:
        lecture_data.append({
            'title': lec.title,
            'start': lec.lacture_date.strftime('%Y-%m-%d'),
            'start_time': lec.start_time.strftime('%H:%M'),
            'end_time': lec.end_time.strftime('%H:%M')
        })

    return render(request, 'upcomming-lecture-list.html', {
        "faculty": faculty,
        "upcommingLectures": upcommingLectures,
        "lecture_json": json.dumps(lecture_data)  # 🟢 Important: dump to JSON!
    })

def demoEvent(request):
    id = request.session.get('faculty_id')
    faculty = Faculty.objects.get(id=id)
    today = timezone.now().date()
    upcommingLectures = Live_Lecture.objects.filter(faculty_id=id, lacture_date__gte=today).order_by('lacture_date')

    lecture_data = []
    for lec in upcommingLectures:
        lecture_data.append({
            'title': lec.title,
            'start': lec.lacture_date.strftime('%Y-%m-%d'),
            'description': lec.video_description or '',
        })

    return render(request, 'demo.html', {
        "faculty": faculty,
        "upcommingLectures": upcommingLectures,
        "lecture_json": json.dumps(lecture_data)  # 🟢 Important: dump to JSON!
    })

def pastLectures(request):
    id =  request.session.get('faculty_id')
    faculty=Faculty.objects.get(id=id)
    today = timezone.now().date()

    pastlecture = Live_Lecture.objects.filter(faculty_id=id, lacture_date__lt=today).order_by('-lacture_date')

    # Pagination setup: 10 lectures per page (change as needed)
    paginator = Paginator(pastlecture, 10)
    page_number = request.GET.get('page')
    paginated_lectures = paginator.get_page(page_number)

    return render(request, 'past-lecture-list.html', {
        "faculty":faculty ,
        "paginated_lectures": paginated_lectures,
        "pastlecture": pastlecture
        })
