import fitz  # PyMuPDF
import json
import os
from tkinter import *
from tkinter import filedialog, simpledialog

class PDFReader:
    def __init__(self, master):
        self.master = master
        self.master.title("PDF Reader")
        
        self.page_number = 0
        self.zoom_level = 1.0  # Уровень масштабирования

        self.notes = {}
        
        self.pdf_document = None
        self.current_file_path = None
        
        self.canvas = Canvas(master)
        self.canvas.pack(fill=BOTH, expand=1)
        
        # Кнопки
        self.button_frame = Frame(master)
        self.button_frame.pack(fill=X, side=BOTTOM)
        
        Button(self.button_frame, text="Открыть PDF", command=self.open_pdf).pack(side=LEFT)
        Button(self.button_frame, text="Заметка", command=self.add_note).pack(side=LEFT)
        Button(self.button_frame, text="Рисовать", command=self.start_drawing).pack(side=LEFT)
        Button(self.button_frame, text="Сохранить", command=self.save_progress).pack(side=LEFT)
        Button(self.button_frame, text="Выход", command=self.master.quit).pack(side=LEFT)
        
        # Обработчик событий прокрутки мыши
        self.canvas.bind("<MouseWheel>", self.on_mouse_wheel)

    def open_pdf(self):
        file_path = filedialog.askopenfilename(filetypes=[("PDF files", "*.pdf")])
        if file_path:
            self.current_file_path = file_path
            self.pdf_document = fitz.open(file_path)
            self.page_number = 0
            self.load_page(self.page_number)

            # Загрузка последней сохраненной страницы
            if os.path.exists("progress.json"):
                with open("progress.json", "r") as f:
                    progress = json.load(f)
                    if progress["file_path"] == self.current_file_path:
                        self.page_number = progress["page_number"]
                        self.load_page(self.page_number)

    def load_page(self, page_number):
        if self.pdf_document is not None and 0 <= page_number < len(self.pdf_document):
            page = self.pdf_document[page_number]
            rect = page.rect  # Размер страницы
            pix = page.get_pixmap(matrix=fitz.Matrix(self.zoom_level, self.zoom_level))
            img = PhotoImage(data=pix.tobytes("png"))
            self.canvas.delete("all")  # Очищаем Canvas перед новым изображением
            self.canvas.create_image(0, 0, anchor=NW, image=img)
            self.canvas.image = img  # Сохраняем ссылку на изображение

            # Устанавливаем размер окна под размер страницы
            self.master.geometry(f"{int(rect.width * self.zoom_level)}x{int(rect.height * self.zoom_level)}")
            self.master.title(f"PDF Reader - {self.current_file_path} - Страница {page_number + 1}")

    def add_note(self):
        note = simpledialog.askstring("Заметка", "Введите вашу заметку:")
        if note and self.pdf_document:
            self.notes[self.page_number] = note
            print(f"Заметка добавлена на странице {self.page_number + 1}: {note}")

    def start_drawing(self):
        # Реализация функции рисования (по желанию)
        print("Функция рисования не реализована.")

    def save_progress(self):
        if self.current_file_path:
            with open("progress.json", "w") as f:
                json.dump({"file_path": self.current_file_path, "page_number": self.page_number}, f)

    def zoom_in(self):
        self.zoom_level *= 1.1  # Увеличиваем уровень масштабирования
        self.load_page(self.page_number)

    def zoom_out(self):
        self.zoom_level /= 1.1  # Уменьшаем уровень масштабирования
        self.load_page(self.page_number)

    def on_mouse_wheel(self, event):
        if event.state & 0x0004:  # Проверка нажатия Ctrl
            # Если Ctrl зажат, изменяем масштаб
            if event.delta > 0:
                self.zoom_in()
            else:
                self.zoom_out()
        else:
            # Если Ctrl не зажат, переключаем между страницами
            if event.delta > 0:
                self.next_page()
            else:
                self.prev_page()

    def next_page(self):
        if self.pdf_document and self.page_number < len(self.pdf_document) - 1:
            self.page_number += 1
            self.load_page(self.page_number)

    def prev_page(self):
        if self.pdf_document and self.page_number > 0:
            self.page_number -= 1
            self.load_page(self.page_number)

if __name__ == "__main__":
    root = Tk()
    pdf_reader = PDFReader(root)
    root.mainloop() - Так же перепиши весь UI на PyQt6 - чтобы интерфейс был современным удобным и лаконичным