#include <luna/String.h>
#include <os/ArgumentParser.h>
#include <os/File.h>
#include <signal.h>
#include <stdio.h>
#include <termios.h>
#include <unistd.h>

Result<int> luna_main(int argc, char** argv)
{
    StringView username;

    os::ArgumentParser parser;
    parser.add_description("Begin a new session on the system.");
    parser.add_system_program_info("login"_sv);
    parser.add_positional_argument(username, "user", false);
    parser.parse(argc, argv);

    if (geteuid() != 0)
    {
        os::eprintln("error: login must be run as root.");
        return 1;
    }

    putchar('\n');

    String name;

    if (username.is_empty())
    {
        signal(SIGTTOU, SIG_IGN);

        if (isatty(STDIN_FILENO)) tcsetpgrp(STDIN_FILENO, getpgid(0));

        auto input = os::File::standard_input();

        os::print("Username: ");

        name = TRY(input->read_line());
        name.trim("\n");

        if (name.is_empty()) return 0;

        username = name.view();
    }

    execl("/bin/su", "login", "-lp", "--", username.chars(), nullptr);

    perror("su");
    return 1;
}