#
# Copyright (c) 2025 Fedir Kovalov.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#

import requests
from io import BytesIO
from PIL import Image, ImageTk
import tkinter as tk
import yt_dlp
import shadowtube.recommend as rec
import shadowtube.preprocess as prep

# kjdshfgklshdfjkglkadshf

import webbrowser

# List of 8 YouTube video IDs
video_ids = rec.recommend(
    prep.sort_history(
        prep.parse_database(
            "/home/fedir/.var/app/io.freetubeapp.FreeTube/config/FreeTube/history.db"
        )
    ),
    verbose=True,
    count=8,
)

print(video_ids)


def get_video_info(video_id):
    """Fetch the title and thumbnail URL of a YouTube video using yt_dlp."""
    ydl_opts = {"quiet": True, "no_warnings": True, "extract_flat": True}

    with yt_dlp.YoutubeDL(ydl_opts) as ydl:
        info = ydl.extract_info(
            f"https://www.youtube.com/watch?v={video_id}", download=False
        )
        return info.get("title", "Title Not Found"), info.get("thumbnail", "")


def open_video(event, video_id):
    """Open the YouTube video in the default web browser when clicked."""
    webbrowser.open(f"https://www.youtube.com/watch?v={video_id}")


def show_video_preview(video_id, row, col):
    """Fetch and display a video's title and thumbnail in a grid layout."""
    title, thumbnail_url = get_video_info(video_id)

    # Fetch thumbnail
    response = requests.get(thumbnail_url)
    if response.status_code == 200:
        image_data = Image.open(BytesIO(response.content))
        image_data = image_data.resize((200, 112))  # Resize for grid
        photo = ImageTk.PhotoImage(image_data)
    else:
        photo = None

    # Create thumbnail label (clickable)
    thumbnail_label = tk.Label(root, image=photo, cursor="hand2")
    thumbnail_label.image = photo  # Keep reference
    thumbnail_label.grid(row=row, column=col, padx=10, pady=10)
    thumbnail_label.bind("<Button-1>", lambda event, v=video_id: open_video(event, v))

    # Create title label (wrapped text)
    title_label = tk.Label(
        root, text=title, font=("Arial", 10, "bold"), wraplength=200, justify="center"
    )
    title_label.grid(row=row + 1, column=col, padx=10, pady=5)


# Create Tkinter window
root = tk.Tk()
root.title("YouTube Video Previews")

# Add all 8 videos in a 2x4 grid
for index, video_id in enumerate(video_ids):
    row = (index // 4) * 2  # Every second row for the title
    col = index % 4
    show_video_preview(video_id, row, col)

root.mainloop()


# kjdhfglkjsdhfgkljhsdkfg