#include <iostream>
#include <sstream>
#include "process.h"
std::string extract_pkgname(const std::string& fzf_line) {
    std::istringstream iss(fzf_line);
    std::string marker, pkgver;
    iss >> marker >> pkgver;
    return pkgver;
}
int main() {
    char* const query_argv[] = { const_cast<char*>("xbps-query"), const_cast<char*>("-Rs"), const_cast<char*>(""), nullptr };
    std::string package_list = run_piped(query_argv, ""); 
    char* const fzf_argv[] = { const_cast<char*>("fzf"), nullptr };
    std::string result = run_piped(fzf_argv, package_list);

    // strip trailing newline fzf adds
    if (!result.empty() && result.back() == '\n') {
        result.pop_back();
    }
    std::string pkgname = extract_pkgname(result);
    char* const install_argv[] = {
        const_cast<char*>("doas"),
        const_cast<char*>("xbps-install"),
        const_cast<char*>("-Sy"),
        pkgname.data(),
        nullptr
    };
    std::string status = spawn(install_argv);
    if (status == "error") {
        std::cerr << "failed to launch doas/xbps-install\n";
        return 1;
    }
    if (status.rfind("sig:", 0) == 0) {
        std::cerr << "xbps-install was killed by signal " << status.substr(4) << "\n";
        return 1;
    }
    if (status != "0") {
        std::cerr << "xbps-install exited with code " << status << "\n";
        return 1;
    }
    return 0;
}
