"""
Abhängigkeiten:
- pyramids (für den Aufbau der Bildpyramiden)
- heartrate (zur Berechnung der Herzfrequenz)
- preprocessing (für die Video-Vorverarbeitung)
- eulerian (für die Euler'sche Video-Magnifikation)
- tkinter und constants (für die GUI und Konstantenverwaltung)

Autor: Roberto Gelsinger
Datum: 07.12.2023
Version: Modulversion
"""

import pyramids
import heartrate
import facedetection
import eulerian
import tkinter as tk
from constants import freq_max, freq_min

def process_video(selected_video_name):
    """
    Verarbeitet ein ausgewähltes Video, um die Herzfrequenz der abgebildeten Person zu ermitteln.

    Dieser Prozess umfasst die Vorverarbeitung des Videos, den Aufbau einer Laplace-Pyramide,
    die Anwendung von FFT-Filterung und Euler'scher Magnifikation, und schließlich die Berechnung
    der Herzfrequenz aus den Video-Daten.

    Args:
    selected_video_name (str): Der Name des zu verarbeitenden Videos.

    Returns:
    None: Die Funktion gibt direkt die berechnete Herzfrequenz auf der Konsole aus.
    """
    # Hier folgt Ihr bisheriger Code für die process_video Funktion

    # Preprocessing phase
    print("Reading + preprocessing video...")
    video_frames, frame_ct, fps = facedetection.read_video("videos/"+selected_video_name)

    # Build Laplacian video pyramid
    print("Building Laplacian video pyramid...")
    lap_video = pyramids.build_video_pyramid(video_frames)



    for i, video in enumerate(lap_video):
        if i == 0 or i == len(lap_video)-1:
            continue

        # Eulerian magnification with temporal FFT filtering
        print("Running FFT and Eulerian magnification...")
        result, fft, frequencies = eulerian.fft_filter(video, freq_min, freq_max, fps)
        lap_video[i] += result

        # Calculate heart rate
        print("Calculating heart rate...")
        heart_rate = heartrate.find_heart_rate(fft, frequencies, freq_min, freq_max)




    # Output heart rate and final video
    print("Heart rate: ", heart_rate, "bpm")
