
from django.views import View
from django.shortcuts import render
from django.views.generic import TemplateView
from django.http import JsonResponse
from .utils import read_json_file
import json


class DashboardView(TemplateView):
    template_name = "pages/index.html"

    def get_context_data(self, **kwargs):
        # Get the data for the dashboard.
        data = {}

        # Add the data to the context.
        context = super().get_context_data(**kwargs)
        context["data"] = data
        return context

class AdScanPresentationView(View):

    def get(self, request):
        template_name = "pages/AdScanPresentation.html"
        context = {}
        return render(request, template_name, context)

    def post(self, request):
        pass

class DarijaAIPresentationView(View):

    def get(self, request):
        template_name = "pages/DarijaAIPresentation.html"
        context = {}
        return render(request, template_name, context)

    def post(self, request):
        pass

class POCPresentationView(View):

    def get(self, request):
        template_name = "pages/poc/poc.html"
        context = {}
        return render(request, template_name, context)

    def post(self, request):
        pass

class POCPresentationViewNewsFR(View):

    def get(self, request):
        template_name = "pages/POC_Demo_News_FR_21042024.html"
        context = {}
        return render(request, template_name, context)

    def post(self, request):
        pass




class CdnOptimizationPresentationView(View):

    def get(self, request):
        template_name = "pages/CdnOptimization.html"
        context = {}
        return render(request, template_name, context)

    def post(self, request):
        pass

class ReportView(View):
    template_name = "pages/reports.html"

    def get_reports_dict(self):
        reports_dict = {
            "DAR_NSA_EP_21": {
                "title": "DAR NSA EP - دار النسا الحلقة - 21",
                "video_src": "ovUraO0YcqM",
                "report": open("/var/www/html/Presentation_Sanoa_Al_oula_2024_Ramdan/src/media/reports/dar_nsa_ep21.txt", "r").read(),
                "comments": read_json_file("/var/www/html/Presentation_Sanoa_Al_oula_2024_Ramdan/src/media/reports/dar_nsa_ep21.json"),
            }
        }
        return reports_dict

    def get(self, request, show_name):
        reports_dict = self.get_reports_dict()
        context = {"report": reports_dict.get(show_name, {})}  # Get the report details based on show_name
        return render(request, self.template_name, context)



# class LoadFaces(View):
#     def get(self,request,date):
#         #
#         date_matched = {
#             "21":"/var/www/html/Presentation_Sanoa_Al_oula_2024_Ramdan/src/static/video/JT en Français Al Aoula du 21_04_2024/faces_b50c2dced2ff4ce3a30ae7f4f8f2f208_2024-04-23_11-22-42.json",
#             "22":"/var/www/html/Presentation_Sanoa_Al_oula_2024_Ramdan/src/static/video/news_2024_04_22/faces_2132db85823f47bebfe4353b215dc844_2024-04-24_07-13-13.json",
#             "24":"/var/www/html/Presentation_Sanoa_Al_oula_2024_Ramdan/src/static/video/news_2024_04_21/faces_8dd0c69c89134c06b7b7577fd86011c1_2024-04-24_01-51-48.json"
#         }
#         #
#         faces = open(date_matched[date])
#         #
#         data = json.load(faces)
#         # Initialize an empty list to store the transformed data
#         transformed_data = {}
#         #
#         for item in data["face_data"]:
#             #
#             for face in item.get('faces', []):
#                 #
#                 name = face.get('name')
#                 #
#                 if name and name not in transformed_data:
#                     transformed_data[name] = []
#                 #
#                 transformed_data[name].append({
#                     "id": item.get('id'),
#                     "time": item.get('time')
#                 })
#         #
#         return JsonResponse({"faces" : transformed_data})


def calculate_intervals_v1(face_data):
    intervals = []
    current_interval = []

    for i in range(len(face_data) - 1):
        current_frame = face_data[i]
        next_frame = face_data[i + 1]

        if next_frame['id'] - current_frame['id'] <= 75:
            current_interval.append(current_frame)
        else:
            current_interval.append(current_frame)
            intervals.append(current_interval)
            current_interval = []

    # Append the last interval
    if current_interval:
        current_interval.append(face_data[-1])
        intervals.append(current_interval)

    return intervals


def calculate_intervals_v2(face_data):
    intervals = []
    current_interval = None

    for frame in face_data:
        if current_interval is None:
            current_interval = {
                "id": len(intervals) + 1,
                "start": frame["time"],
                "end": {"id": frame["id"], "time": frame["time"]}
            }
        elif frame["id"] - current_interval["end"]["id"] <= 100:
            current_interval["end"] = {"id": frame["id"], "time": frame["time"]}
        else:
            intervals.append(current_interval)
            current_interval = {
                "id": len(intervals) + 1,
                "start": frame["time"],
                "end": {"id": frame["id"], "time": frame["time"]}
            }
    if current_interval:
        intervals.append(current_interval)

    return intervals


class LoadFaces(View):
    def get(self,request,date):
        #
        date_matched = {
            "21":"/var/www/html/Presentation_Sanoa_Al_oula_2024_Ramdan/src/static/video/JT en Français Al Aoula du 21_04_2024/faces_b50c2dced2ff4ce3a30ae7f4f8f2f208_2024-04-23_11-22-42.json",
            "22":"/var/www/html/Presentation_Sanoa_Al_oula_2024_Ramdan/src/static/video/news_2024_04_22/faces_2132db85823f47bebfe4353b215dc844_2024-04-24_07-13-13.json",
            "24":"/var/www/html/Presentation_Sanoa_Al_oula_2024_Ramdan/src/static/video/news_2024_04_21/faces_8dd0c69c89134c06b7b7577fd86011c1_2024-04-24_01-51-48.json"
        }
        #
        faces = open(date_matched[date])
        #
        data = json.load(faces)
        # Initialize an empty list to store the transformed data
        transformed_data = {}
        #
        for item in data["face_data"]:
            #
            for face in item.get('faces', []):
                #
                name = face.get('name')
                #
                if name and name not in transformed_data:
                    transformed_data[name] = []
                #
                transformed_data[name].append({
                    "id": item.get('id'),
                    "time": item.get('time')
                })
        for name, face_data in transformed_data.items():
            intervals = calculate_intervals_v2(face_data)
            # Replace 'end' with 'end["time"]'
            for interval in intervals:
                interval['end'] = interval['end']['time']
            transformed_data[name] = intervals

        return JsonResponse({
            "faces": transformed_data
        })


# class LoadFaces(View):
#     def get(self,request,date):
#         date_matched = {
#             "21":"/var/www/html/Presentation_Sanoa_Al_oula_2024_Ramdan/src/static/video/JT en Français Al Aoula du 21_04_2024/faces_b50c2dced2ff4ce3a30ae7f4f8f2f208_2024-04-23_11-22-42.json",
#             "22":"/var/www/html/Presentation_Sanoa_Al_oula_2024_Ramdan/src/static/video/news_2024_04_22/faces_2132db85823f47bebfe4353b215dc844_2024-04-24_07-13-13.json",
#             "24":"/var/www/html/Presentation_Sanoa_Al_oula_2024_Ramdan/src/static/video/news_2024_04_21/faces_8dd0c69c89134c06b7b7577fd86011c1_2024-04-24_01-51-48.json"
#         }
#         faces = open(date_matched[date])
#         data = json.load(faces)
#         parsed_data = []
#         # # Initialize an empty list to store the transformed data
#         transformed_data = {}


#         for item in data["face_data"]:
#             for face in item.get('faces', []):
#                 name = face.get('name')
#                 if name and name not in transformed_data:
#                     transformed_data[name] = []
#                 transformed_data[name].append({
#                     "id": item.get('id'),
#                     "time": item.get('time')
#                 })

#         # # # Iterate over each entry in the "face_data"
#         # for entry in data["face_data"]:
#         # frame_info = {"frame_id": entry["id"], "time": entry["time"], "faces": []}

#         # # Iterate over each face detected in the frame
#         # for face in entry["faces"]:
#         #     face_info = {
#         #         "name": face["name"],
#         #         # "age": face["age"],
#         #         # "confidence": face["confidence"],
#         #         # "region": face["region"]
#         #     }

#         #     frame_info["faces"].append(face_info)

#         # transformed_data.append(frame_info)

#         # print(transformed_data)


#         # # Convert face data into intervals
#         # intervals = []

#         # for entry in data["face_data"]:
#         #     frame_start = entry["time"]
#         #     frame_end = frame_start + 1  # Assuming each frame lasts for 1 second

#         #     for face in entry["faces"]:
#         #         face_start = frame_start
#         #         face_end = frame_end

#         #         # Create interval object
#         #         interval = {
#         #             "id": face["name"],
#         #             "start": face_start,
#         #             "end": face_end,
#         #             "content": face["name"]
#         #         }

#         #         intervals.append(interval)

#         # print(data['face_data'][0])
#         return JsonResponse({"faces" : transformed_data})


# new views

class MusicRemovalView(View):

    def get(self, request):
        template_name = "pages/music_removal.html"
        context = {}
        return render(request, template_name, context)

    def post(self, request):
        pass

class POCArabicOnePresentationView(View):

    def get(self, request):
        template_name = "pages/poc/poc_ar_1.html"
        context = {}
        return render(request, template_name, context)

    def post(self, request):
        pass

class POCArabicTwoPresentationView(View):

    def get(self, request):
        template_name = "pages/poc/poc_ar_2.html"
        context = {}
        return render(request, template_name, context)

    def post(self, request):
        pass

class POCFrenchOnePresentationView(View):

    def get(self, request):
        template_name = "pages/poc/poc_fr_1.html"
        context = {}
        return render(request, template_name, context)

    def post(self, request):
        pass
