Загрузка данных


# main.py
# -*- coding: utf-8 -*-
import sys
import tkinter as tk
from tkinter import ttk
from gui.main_interface import MainInterface 
from modules.data.database_module import init_database

# Импорт окна авторизации (добавлено)
try:
    from gui.auth_interface import AuthInterface
except ImportError:
    print("[FATAL] Не найден файл gui/auth_interface.py")
    sys.exit(1)

init_database()

def main():
    # --- ШАГ 1: Создаем ГЛАВНОЕ ОКНО ---
    # ИСПРАВЛЕНО: Теперь мы создаем экземпляр твоего подготовленного класса
    app = MainInterface()
    
    app.title("ДОЗОР -- Heri-Hodie-Cras")
    app.geometry("458x360") 
    app.resizable(False, False)

    current_user = {"login": None}

    def do_login(username, password):
        """Обработчик успеха из окна авторизации."""
        if username and password:
            current_user["login"] = username
            enable_app(app)  # Разблокируем именно это окно 'app'
            auth_win.destroy() 
        else:
            from tkinter import messagebox
            messagebox.showwarning("Ошибка", "Поля не могут быть пустыми")

    # --- ШАГ 2: Блокируем интерфейс ДО любых расчетов геометрии ---
    disable_app(app) 

    # Центрируем окно НА ЭКРАНЕ
    screen_w = app.winfo_screenwidth()
    screen_h = app.winfo_screenheight()
    win_w, win_h = 458, 360
    pos_x = int((screen_w / 2) - (win_w / 2))
    pos_y = int((screen_h / 2) - (win_h / 2))
    app.geometry(f"{win_w}x{win_h}+{pos_x}+{pos_y}") 

    app.deiconify()
    app.lift()
    app.focus_force()

    # Поверх главного окна открываем модальное окно входа
    try:
        auth_win = AuthInterface(app, on_login_click=do_login)
        auth_win.transient(app)
        auth_win.grab_set() 
        
        app.wait_window(auth_win)
    except Exception as e:
        print(f"[CRITICAL ERROR] Failed to initialize Auth Window: {e}")
        app.destroy()
        return

    if not current_user["login"]:
        app.destroy()
        return

    # --- ШАГ 3: Приложение работает ---
    app.mainloop()


def disable_app(root_widget):
    for child in root_widget.winfo_children():
        config_state(child, "disabled")
        disable_app(child)

def enable_app(root_widget):
    for child in root_widget.winfo_children():
        config_state(child, "normal")
        enable_app(child)

def config_state(widget, state):
    widget_class = str(widget).split('!')[-1].split('.')[0]
    
    if isinstance(widget, tk.Button):
        widget.config(state=state)
    elif isinstance(widget, ttk.Entry) or isinstance(widget, ttk.Combobox):
        widget.config(state=state)
    elif hasattr(widget, 'config'):
        try:
            widget.config(state=state)
        except Exception:
            pass

if __name__ == "__main__":
    main()