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

#include "dups.h"
#include "neverallow.h"
#include "perm.h"
#include "typecmp.h"
#include "booleans.h"
#include "attribute.h"
#include "utils.h"

#define NUM_COMPONENTS (int) (sizeof(analyze_components)/sizeof(analyze_components[0]))

#define COMP(x) { #x, sizeof(#x) - 1, x ##_usage, x ##_func }
static struct {
    const char *key;
    size_t keylen;
    void (*usage) (void);
    int (*func) (int argc, char **argv, policydb_t *policydb);
} analyze_components[] = {
    COMP(dups),
    COMP(neverallow),
    COMP(permissive),
    COMP(typecmp),
    COMP(booleans),
    COMP(attribute)
};

void usage(char *arg0)
{
    int i;

    fprintf(stderr, "%s must be called on a policy file with a component and the appropriate arguments specified\n", arg0);
    fprintf(stderr, "%s <policy-file>:\n", arg0);
    for(i = 0; i < NUM_COMPONENTS; i++) {
        analyze_components[i].usage();
    }
    exit(1);
}

int main(int argc, char **argv)
{
    char *policy;
    struct policy_file pf;
    policydb_t policydb;
    int rc;
    int i;

    if (argc < 3)
        usage(argv[0]);
    policy = argv[1];
    if(load_policy(policy, &policydb, &pf))
        exit(1);
    for(i = 0; i < NUM_COMPONENTS; i++) {
        if (!strcmp(analyze_components[i].key, argv[2])) {
            rc = analyze_components[i].func(argc - 2, argv + 2, &policydb);
            if (rc && USAGE_ERROR) {
                usage(argv[0]); }
            return rc;
        }
    }
    usage(argv[0]);
    exit(0);
}
