#include <QApplication>
#include <QDebug>
#include <QDir>
#include <QFontDatabase>
#include <QPixmap>
#include <QSplashScreen>
#include <QStandardPaths>
#include <QStyleFactory>
#include <QTimer>
#include "qthread.h"
#include "recorder_example_app.h"

int main(int argc, char *argv[])
{ // 启用高DPI支持
    QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);

    QApplication app(argc, argv);
    av::Logger::initialize("test_log.txt", av::LogLevel::DEBUG, false, true);
    // 设置应用程序信息
    app.setApplicationName("AV录制器示例应用");
    app.setApplicationVersion("1.0.0");
    app.setApplicationDisplayName("AV录制器");
    app.setOrganizationName("AV");
    app.setOrganizationDomain("av.com");
    
    // 设置应用程序图标
    app.setWindowIcon(QIcon(":/icons/recorder.png"));

    // 设置样式
    // app.setStyle(QStyleFactory::create("Fusion"));

    // 创建启动画面
    QPixmap splashPixmap(400, 300);
    splashPixmap.fill(QColor(43, 43, 43)); // 深色背景
    
    QPainter painter(&splashPixmap);
    painter.setRenderHint(QPainter::Antialiasing);
    
    // 绘制标题
    QFont titleFont("Arial", 24, QFont::Bold);
    painter.setFont(titleFont);
    painter.setPen(QColor(255, 255, 255));
    painter.drawText(splashPixmap.rect(), Qt::AlignCenter, "AV录制器");
    
    // 绘制版本信息
    QFont versionFont("Arial", 12);
    painter.setFont(versionFont);
    painter.setPen(QColor(200, 200, 200));
    QRect versionRect = splashPixmap.rect();
    versionRect.setTop(versionRect.center().y() + 30);
    painter.drawText(versionRect, Qt::AlignCenter, "版本 1.0.0");
    
    // 绘制加载信息
    QFont loadingFont("Arial", 10);
    painter.setFont(loadingFont);
    painter.setPen(QColor(150, 150, 150));
    QRect loadingRect = splashPixmap.rect();
    loadingRect.setTop(loadingRect.bottom() - 40);
    painter.drawText(loadingRect, Qt::AlignCenter, "正在初始化...");
    
    QSplashScreen splash(splashPixmap);
    splash.show();
    
    // 处理事件以显示启动画面
    app.processEvents();
    
    // 模拟初始化过程
    splash.showMessage("正在加载录制器模块...", Qt::AlignBottom | Qt::AlignCenter, Qt::white);
    app.processEvents();
    QThread::msleep(100);

    splash.showMessage("正在初始化音频系统...", Qt::AlignBottom | Qt::AlignCenter, Qt::white);
    app.processEvents();
    QThread::msleep(100);

    splash.showMessage("正在初始化视频系统...", Qt::AlignBottom | Qt::AlignCenter, Qt::white);
    app.processEvents();
    QThread::msleep(100);

    splash.showMessage("正在加载用户界面...", Qt::AlignBottom | Qt::AlignCenter, Qt::white);
    app.processEvents();
    QThread::msleep(100);

    // 创建并显示主窗口
    RecorderExampleApp mainWindow;
    
    splash.showMessage("启动完成", Qt::AlignBottom | Qt::AlignCenter, Qt::white);
    app.processEvents();
    QThread::msleep(200);
    
    splash.finish(&mainWindow);
    mainWindow.show();
    
    // 检查命令行参数
    QStringList arguments = app.arguments();
    for (int i = 1; i < arguments.size(); ++i) {
        const QString& arg = arguments.at(i);
        Q_UNUSED(arg); // 标记变量为未使用，避免编译警告

        // if (arg == "--start-recording" || arg == "-r") {
        //     // 自动开始录制
        //     QTimer::singleShot(1000, &mainWindow, &RecorderExampleApp::onStartRecording);
        // } else if (arg == "--start-preview" || arg == "-p") {
        //     // 自动开始预览
        //     QTimer::singleShot(1000, &mainWindow, &RecorderExampleApp::onStartPreview);
        // } else if (arg == "--minimized" || arg == "-m") {
        //     // 最小化启动
        //     mainWindow.showMinimized();
        // } else if (arg == "--help" || arg == "-h") {
        //     // 显示帮助信息
        //     qDebug() << "AV录制器示例应用 v1.0.0";
        //     qDebug() << "";
        //     qDebug() << "用法: recorder_example [选项]";
        //     qDebug() << "";
        //     qDebug() << "选项:";
        //     qDebug() << "  -r, --start-recording    启动后自动开始录制";
        //     qDebug() << "  -p, --start-preview      启动后自动开始预览";
        //     qDebug() << "  -m, --minimized          最小化启动";
        //     qDebug() << "  -h, --help               显示此帮助信息";
        //     qDebug() << "";
        //     qDebug() << "快捷键:";
        //     qDebug() << "  F9                       开始录制";
        //     qDebug() << "  F10                      停止录制";
        //     qDebug() << "  F11                      暂停录制";
        //     qDebug() << "  F12                      恢复录制";
        //     qDebug() << "  Ctrl+Shift+R             快速录制开关";
        //     qDebug() << "  Ctrl+Shift+P             快速预览开关";
        //     qDebug() << "  Ctrl+T                   打开设置";
        //     qDebug() << "  Ctrl+Q                   退出应用";
        //     return 0;
        // }
    }
    
    return app.exec();
}
