#include "theme.h"
#include "common/parsing.h"
#include "detection/gtk_qt/gtk_qt.h"
#include "detection/displayserver/displayserver.h"

const char* ffDetectTheme(FFThemeResult* result)
{
    const FFDisplayServerResult* wmde = ffConnectDisplayServer();

    if(ffStrbufIgnCaseEqualS(&wmde->wmProtocolName, FF_WM_PROTOCOL_TTY))
        return "Theme isn't supported in TTY";

    const FFQtResult* plasma = ffDetectQt();
    const FFstrbuf* gtk2 = &ffDetectGTK2()->theme;
    const FFstrbuf* gtk3 = &ffDetectGTK3()->theme;
    const FFstrbuf* gtk4 = &ffDetectGTK4()->theme;

    if(plasma->widgetStyle.length == 0 && plasma->colorScheme.length == 0 && gtk2->length == 0 && gtk3->length == 0 && gtk4->length == 0)
        return "No themes found";

    ffParseGTK(&result->theme2, gtk2, gtk3, gtk4);

    FF_STRBUF_AUTO_DESTROY plasmaColorPretty = ffStrbufCreate();
    if(ffStrbufStartsWithIgnCase(&plasma->colorScheme, &plasma->widgetStyle))
        ffStrbufAppendNS(&plasmaColorPretty, plasma->colorScheme.length - plasma->widgetStyle.length, &plasma->colorScheme.chars[plasma->widgetStyle.length]);
    else
        ffStrbufAppend(&plasmaColorPretty, &plasma->colorScheme);

    ffStrbufTrim(&plasmaColorPretty, ' ');

    if(plasma->widgetStyle.length > 0)
    {
        ffStrbufAppend(&result->theme1, &plasma->widgetStyle);

        if(plasma->colorScheme.length > 0)
        {
            ffStrbufAppendS(&result->theme1, " (");

            if(plasmaColorPretty.length > 0)
                ffStrbufAppend(&result->theme1, &plasmaColorPretty);
            else
                ffStrbufAppend(&result->theme1, &plasma->colorScheme);

            ffStrbufAppendC(&result->theme1, ')');
        }
    }
    else if(plasma->colorScheme.length > 0)
    {
        if(plasmaColorPretty.length > 0)
            ffStrbufAppend(&result->theme1, &plasmaColorPretty);
        else
            ffStrbufAppend(&result->theme1, &plasma->colorScheme);
    }

    if(plasma->widgetStyle.length > 0 || plasma->colorScheme.length > 0)
        ffStrbufAppendS(&result->theme1, " [Qt]");

    return NULL;
}
