#include "arguments.h"
#include "common.h"

#include <argp.h>
#include <string.h>

error_t parseArgument(int key, char* arg, struct argp_state* state) {
    Args* args = state->input;

    switch (key) {
    case 'v':
        args->verbose = TRUE;
        break;

    case 'd':
        args->compress = FALSE;
        break;

    case ARGP_KEY_ARG:
        switch (state->arg_num) {
        case 0:
            // Premier argument : fichier d'entrée
            args->source = fopen(arg, "rb");

            if (args->source == NULL) {
                argp_error(
                    state, "%s: %s",
                    arg, strerror(errno)
                );
            }
            break;

        case 1:
            // Second argument : fichier de sortie. Si omis,
            // utilisation de la sortie standard
            args->dest = fopen(arg, "wb");

            if (args->dest == NULL) {
                argp_error(
                    state, "%s: %s",
                    arg, strerror(errno)
                );
            }
            break;

        default:
            argp_error(
                state, "trop d'arguments (l'argument %s, numéro %d "
                "est superflu)", arg, state->arg_num + 1
            );
        }
        break;

    case ARGP_KEY_END:
        if (state->arg_num < 1) {
            argp_error(state, "fichier d'entrée manquant");
        }
        break;

    default:
        return ARGP_ERR_UNKNOWN;
    }

    return 0;
}
