#pragma once

#include "fastfetch.h"
#include "modules/terminal/option.h"
#include "modules/shell/option.h"

typedef struct FFShellResult {
    FFstrbuf processName;
    FFstrbuf exe;        // Actually arg0 in *nix
    const char* exeName; // pointer to a char in exe
    FFstrbuf exePath;    // Full real path to executable file
    FFstrbuf prettyName;
    FFstrbuf version;
    uint32_t pid;
    uint32_t ppid;
    int32_t tty;
} FFShellResult;

typedef struct FFTerminalResult {
    FFstrbuf processName;
    FFstrbuf exe;
    FFstrbuf prettyName;
    const char* exeName; // pointer to a char in exe
    FFstrbuf exePath;    // Full real path to executable file
    FFstrbuf version;
    FFstrbuf tty;
    uint32_t pid;
    uint32_t ppid;
} FFTerminalResult;

const FFShellResult* ffDetectShell();
const FFTerminalResult* ffDetectTerminal();

bool fftsGetShellVersion(FFstrbuf* exe, const char* exeName, FFstrbuf* version);
bool fftsGetTerminalVersion(FFstrbuf* processName, FFstrbuf* exe, FFstrbuf* version);
