import subprocess
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gio
import shutil
import os

class GreeterSettingsWindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="DEKUVE Greeter Settings")
        self.set_default_size(480, 640)
        self.set_resizable(False)

        main_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
        self.add(main_box)
        main_box.set_margin_top(0)  # Отступ сверху
        main_box.set_margin_bottom(25)  # Отступ снизу
        main_box.set_margin_start(25)  # Отступ слева
        main_box.set_margin_end(25)  # Отступ справа

        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
        main_box.pack_start(vbox, True, True, 0)

        image = Gtk.Image.new_from_file("/opt/dekuve-p/dekuve-greeter.svg")
        vbox.pack_start(image, False, False, 10)

        upload_button = Gtk.Button(label="Upload and Apply Custom Video")
        upload_button.connect("clicked", self.upload_button_clicked)
        vbox.pack_start(upload_button, False, False, 0)

        scrolled_window = Gtk.ScrolledWindow()
        vbox.pack_start(scrolled_window, True, True, 0)

        self.files_liststore = Gtk.ListStore(str)
        self.files_list = Gtk.TreeView(model=self.files_liststore)
        scrolled_window.add(self.files_list)

        renderer_text = Gtk.CellRendererText()
        column = Gtk.TreeViewColumn("Default Videos", renderer_text, text=0)
        self.files_list.append_column(column)

        apply_button = Gtk.Button(label="Apply Selected Default One")
        apply_button.connect("clicked", self.apply_button_clicked)
        vbox.pack_start(apply_button, False, False, 0)

        self.refresh_file_list()

    def upload_button_clicked(self, button):
        file_chooser = Gtk.FileChooserDialog(
            "Choose the video to apply", None, Gtk.FileChooserAction.OPEN,
            (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
            Gtk.STOCK_OPEN, Gtk.ResponseType.OK)
        )

        file_filter = Gtk.FileFilter()
        file_filter.set_name("Video files")
        file_filter.add_mime_type("video/mp4")
        file_chooser.add_filter(file_filter)

        response = file_chooser.run()
        if response == Gtk.ResponseType.OK:
            file_path = file_chooser.get_filename()
            self.upload_file(file_path)
        file_chooser.destroy()

    def refresh_file_list(self):
        self.files_liststore.clear()
        video_files = self.get_video_files()
        for file in video_files:
            self.files_liststore.append([file])

    def upload_file(self, file_path):
        dest_path = "/usr/share/web-greeter/themes/dekuve/video/movie.mp4"
        try:
            # Используем pkexec для копирования файла с запросом пароля
            subprocess.run(['pkexec', 'cp', file_path, dest_path], check=True)
            print("File uploaded successfully")
            self.refresh_file_list()
        except Exception as e:
            print("File upload error:", e)

    def get_video_files(self):
        video_dir = "/usr/share/web-greeter/themes/dekuve/video/src/"
        try:
            video_files = [file for file in os.listdir(video_dir) if file.endswith(".mp4")]
            video_files.sort()
            return video_files
        except Exception as e:
            print("Error getting list of files:", e)
            return []

    def apply_button_clicked(self, button):
        selection = self.files_list.get_selection()
        model, treeiter = selection.get_selected()
        if treeiter is not None:
            selected_file = model[treeiter][0]
            selected_path = os.path.join("/usr/share/web-greeter/themes/dekuve/video/src/", selected_file)
            self.upload_file(selected_path)

win = GreeterSettingsWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()
