#include <QApplication>
#include <QDir>
#include <QStandardPaths>
#include <QMessageBox>
#include <QTranslator>
#include <QLocale>
#include <QLibraryInfo>
#include <QTimer>
#include <QFileInfo>

#include "view/mainwindow.h"
#include "controller/maincontroller.h"
#include "controller/altiumparser.h"
#include "controller/databasecontroller.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    
    // Настройка информации о приложении
    app.setApplicationName("GostGenerator");
    app.setApplicationVersion("1.0.0");
    app.setOrganizationName("Your Organization");
    app.setOrganizationDomain("yourdomain.com");
    
    // Настройка переводов
    QTranslator translator;
    const QStringList uiLanguages = QLocale::system().uiLanguages();
    for (const QString &locale : uiLanguages) {
        const QString baseName = "GostGenerator_" + QLocale(locale).name();
        if (translator.load(":/i18n/" + baseName)) {
            app.installTranslator(&translator);
            break;
        }
    }
    
    // Создание контроллера
    MainController controller;
    
    // Инициализация глобальной базы данных для настроек
    if (!controller.initializeGlobalDatabase()) {
        QMessageBox::critical(nullptr, QObject::tr("Ошибка"),
                            QObject::tr("Не удалось инициализировать глобальную базу данных: %1")
                            .arg(controller.lastError()));
        return -1;
    }
    
    // Создание главного окна
    MainWindow window(&controller);
    window.show();
    
    // Подключение сигналов
    QObject::connect(&controller, &MainController::databaseError,
                    &window, [&window](const QString &error) {
        QMessageBox::critical(&window, QObject::tr("Ошибка БД"), error);
    });
    
    // Обработка аргументов командной строки (открытие файла проекта)
    QStringList args = app.arguments();
    if (args.size() > 1) {
        // Первый аргумент - это имя исполняемого файла, остальные - файлы для открытия
        for (int i = 1; i < args.size(); ++i) {
            QString filePath = args[i];
            QFileInfo fileInfo(filePath);
            
            // Проверяем, что это файл проекта
            if (fileInfo.exists() && (fileInfo.suffix().toLower() == "pdfprj" || fileInfo.suffix().toLower() == "db")) {
                // Используем QTimer для отложенного открытия, чтобы окно успело полностью инициализироваться
                QTimer::singleShot(100, [&window, filePath]() {
                    window.openProjectFile(filePath);
                });
                break; // Открываем только первый файл проекта
            }
        }
    }
    
    return app.exec();
}
