#include "redump_dat.h"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static const char *optional_arg(const char *arg) {
    if (!arg || strcmp(arg, "-") == 0)
        return NULL;
    return arg;
}

int main(int argc, char **argv) {
    const char *explicit_dir;
    const char *executable_dir;
    const char *basename;
    const char *expected_path;
    int expected_found;
    int found;
    char resolved[1024];

    if (argc != 6) {
        fprintf(stderr,
                "Usage: %s <explicit-dir|-> <executable-dir|-> "
                "<basename> <expected-path> <expected-found-0-or-1>\n",
                argc > 0 ? argv[0] : "test_redump_dat_resolver");
        return 64;
    }

    explicit_dir = optional_arg(argv[1]);
    executable_dir = optional_arg(argv[2]);
    basename = argv[3];
    expected_path = argv[4];
    expected_found = atoi(argv[5]) ? 1 : 0;

    memset(resolved, 0, sizeof(resolved));
    found = redump_resolve_dat_path(
        explicit_dir,
        executable_dir,
        basename,
        resolved,
        sizeof(resolved)
    ) ? 1 : 0;

    printf("resolved=%s\n", resolved);
    printf("found=%d\n", found);

    if (found != expected_found) {
        fprintf(stderr, "Found-state mismatch: expected %d, observed %d\n",
                expected_found, found);
        return 1;
    }

    if (strcmp(resolved, expected_path) != 0) {
        fprintf(stderr, "Path mismatch:\n  expected: %s\n  observed: %s\n",
                expected_path, resolved);
        return 2;
    }

    return 0;
}
