// kk-desligar-escuta — para o programa escuta.
//
// Uso:
//   kk --desligar-escuta

#include <filesystem>
#include <iostream>
#include <limits.h>
#include <string>
#include <unistd.h>
#include <vector>

namespace fs = std::filesystem;

static std::string self_exe_path() {
    char buf[PATH_MAX];
    ssize_t n = readlink("/proc/self/exe", buf, sizeof(buf) - 1);
    if (n < 0) return "";
    buf[n] = '\0';
    return std::string(buf);
}

static fs::path project_root() {
    const std::string self = self_exe_path();
    fs::path dir = self.empty() ? fs::current_path() : fs::path(self).parent_path();
    // .../core/comandos -> .../
    return dir.parent_path().parent_path();
}

int main(int argc, char** argv) {
    for (int i = 1; i < argc; ++i) {
        const std::string arg = argv[i];
        if (arg == "--help" || arg == "-h") {
            std::cout << "uso: kk --desligar-escuta\n";
            return 0;
        }
        std::cerr << "kk-desligar-escuta: argumento desconhecido: " << arg << "\n";
        return 2;
    }

    const fs::path escuta = project_root() / "escuta" / "escuta";
    if (!fs::is_regular_file(escuta) || access(escuta.c_str(), X_OK) != 0) {
        std::cerr << "kk-desligar-escuta: executável não encontrado: " << escuta.string() << "\n";
        return 127;
    }

    std::vector<std::string> args = {
        escuta.filename().string(),
        "--desligar"
    };

    std::vector<char*> cargv;
    for (auto& a : args) cargv.push_back(const_cast<char*>(a.c_str()));
    cargv.push_back(nullptr);

    execv(escuta.c_str(), cargv.data());
    std::perror("kk-desligar-escuta: execv");
    return 127;
}
