from django.shortcuts import render
from django.http import HttpResponse
from django.http import JsonResponse

from django.db.models import Q
from django.db import connections

from module.models import Module
from class_session.models import ClassSession,ClassSessionView
from venue.models import Venue


# Create your views here.
def stages(request):
    return HttpResponse("Hello world!")


periods = [1, 2, 3, 4]
days = ['Monday','Tuesday','Wednesday','Thursday','Friday']
def getModuleTimeTable(request,code):
    my_list = []
    display_title = 'MODULE: ' + code
    classsession = ClassSession.objects.all().select_related("venue_id", "level_id", "teacher_id", "module_id").filter(
        module__code=code).values()
    # print(classsession)
    for css_a in classsession:
        css_a1 = ClassSession(**css_a)
        print(css_a1.teacher.title+" "+css_a1.teacher.name)
        csv = ClassSessionView(css_a1.session_day, css_a1.period, css_a1.duration, css_a1.venue.name,
                               css_a1.level.code, css_a1.module.code,
                               css_a1.teacher.title.capitalize()+" "+css_a1.teacher.surname)
        my_list.append(csv)

    return render(request, 'timetable.html', {'class_sessions': my_list, 'periods': periods, 'weekdays': days, 'display_title':display_title})


def getTeacherTimeTable(request,ecno):
    my_list = []
    display_title = 'LECTURER: ' + ecno
    classsession = ClassSession.objects.all().select_related("venue_id", "level_id", "teacher_id", "module_id").filter(
        teacher__ec_number=ecno).values()
    # print(classsession)
    for css_a in classsession:
        css_a1 = ClassSession(**css_a)
        print(css_a1.venue.name)
        csv = ClassSessionView(css_a1.session_day, css_a1.period, css_a1.duration, css_a1.venue.name,
                               css_a1.level.code,
                               css_a1.module.code,
                               css_a1.teacher.title.capitalize()+" "+css_a1.teacher.surname)
        my_list.append(csv)

    return render(request, 'timetable.html', {'class_sessions': my_list, 'periods': periods, 'weekdays': days, 'display_title':display_title})


def getLevelTimeTable(request,code):
    my_list = []
    display_title = 'Programme Level: ' + code
    classsession = ClassSession.objects.all().select_related("venue_id", "level_id", "teacher_id", "module_id").filter(
        level__code=code).values()
    # print(classsession)
    for css_a in classsession:
        css_a1 = ClassSession(**css_a)
        print(css_a1.venue.name)
        csv = ClassSessionView(css_a1.session_day, css_a1.period, css_a1.duration, css_a1.venue.name,
                               css_a1.level.code,
                               css_a1.module.code,
                               css_a1.teacher.title.capitalize()+" "+css_a1.teacher.surname)
        my_list.append(csv)

    return render(request, 'timetable.html', {'class_sessions': my_list, 'periods': periods, 'weekdays': days, 'display_title':display_title})

def getLevelTimeTableJSON(request,code,output_datatype):
    my_list = []
    display_title = 'Programme Level: ' + code
    classsession = ClassSession.objects.all().select_related("venue_id", "level_id", "teacher_id", "module_id").filter(
        level__code=code).values()
    # print(classsession)
    for css_a in classsession:
        css_a1 = ClassSession(**css_a)
        print(css_a1.venue.name)
        csv = ClassSessionView(css_a1.session_day, css_a1.period, css_a1.duration, css_a1.venue.name,
                               css_a1.level.code,
                               css_a1.module.code,
                               css_a1.teacher.title.capitalize()+" "+css_a1.teacher.surname)

        
        #my_list.append(csv)
        session_data = {
            'session_day': css_a1.session_day,
            'period': css_a1.period,
            'duration': css_a1.duration,
            'venue_name': css_a1.venue.name,  # Adjust to match your field names
            'level_code': css_a1.level.code,   # Adjust to match your field names
            'module_code': css_a1.module.code,  # Adjust to match your field names
            'teacher_name': css_a1.teacher.title.capitalize()+" "+css_a1.teacher.surname
        }
        my_list.append(session_data)

    return JsonResponse(my_list, safe=False)


def getProgrammeTimeTable(request,code):
    my_list = []
    display_title = 'Programme: ' + code
    classsession = ClassSession.objects.all().select_related("venue_id", "level_id", "teacher_id", "module_id").filter(teacher__isnull=False).values()



    print(classsession)
    for css_a in classsession:
        css_a1 = ClassSession(**css_a)


        if css_a1 != None:

            print("....................................................................")
            print(css_a1)
            print("....................................................................")
            if css_a1.level.code.split("-")[0].lower() != code.lower():
                continue
            print(css_a1.venue.name)
            csv = ClassSessionView(css_a1.session_day, css_a1.period, css_a1.duration, css_a1.venue.name,
                                   css_a1.level.code,
                                   css_a1.module.code,
                                   css_a1.teacher.title.capitalize()+" "+css_a1.teacher.surname)
            my_list.append(csv)

    return render(request, 'timetable.html', {'class_sessions': my_list, 'periods': periods, 'weekdays': days, 'display_title':display_title})


def getVenueTimeTable(request,code):
    my_list = []
    display_title = 'VENUE: '+code
    classsessions = ClassSession.objects.select_related("venue_id", "level_id", "teacher_id", "module_id").filter(venue__code=code).values()

    default_conn = connections['default']
    sql = classsessions.query.get_compiler(connection=default_conn).as_sql()
    print(sql)
    print(classsessions.count())
    for css_a in classsessions:
        css_a1 = ClassSession(**css_a)
        if css_a1.module == None:
            continue
        #print(css_a1)
        csv = ClassSessionView(css_a1.session_day, css_a1.period, css_a1.duration, css_a1.venue.name, css_a1.level.code, css_a1.module.code,
                               css_a1.teacher.title.capitalize()+" "+css_a1.teacher.surname)
        my_list.append(csv)

    return render(request, 'timetable.html', {'class_sessions': my_list, 'periods': periods, 'weekdays': days, 'display_title': display_title})


def getWholeTimeTable(request):
    my_list = []
    display_title = 'WHOLE: '
    classsessions = ClassSession.objects.select_related("venue_id", "level_id", "teacher_id", "module_id").order_by("venue_id__name").values()

    all_venues = Venue.objects.all().values()
    venues = []


    for venue in all_venues:
        venue_1 = Venue(**venue)
        venues.append(venue_1)
    print(venues)

    default_conn = connections['default']
    sql = classsessions.query.get_compiler(connection=default_conn).as_sql()
    print(sql)
    print(classsessions.count())
    for css_a in classsessions:
        css_a1 = ClassSession(**css_a)
        if css_a1.module == None:
            continue
        print(css_a1.module.name)
        csv = ClassSessionView(css_a1.session_day, css_a1.period, css_a1.duration, css_a1.venue.name, css_a1.level.code, css_a1.module.code,
                               css_a1.teacher.title.capitalize()+" "+css_a1.teacher.surname)
        my_list.append(csv)

    print(my_list)

    return render(request, 'whole_timetable.html', {'class_sessions': my_list, 'periods': periods, 'weekdays': days, 'venues': venues, 'display_title': display_title})

