// minux.cpp : définit le point d'entrée pour l'application console.
//

#include "stdafx.h"

#include "minux.h"
#include "archive.h"
#include <string.h>

int action;				// action demandée par l'utilisateur
int algo_compression;	// type de compression, si applicable
char*nom_archive;		// nom de l'archive
char*nom_fichier;		// nom du fichier, si applicable
char*destination;		// répertoire de destination, si applicable

int analyse_ligne_commande(int argc, char* argv[])
{
	action=AIDE; // par défaut
	if(argc<2)
		return action;	// pas assez d'arguments

	// minux -c archive
	if(!strcmp(argv[1],"-c"))
	{
		if(argc==3)
		{
			action=CREER_ARCHIVE;

			// réserver des char et copier le nom de l'archive
			nom_archive=new char[strlen(argv[2])+1]; // 0 terminal
			strcpy(nom_archive,argv[2]);

			return action;
		}
	}

	// minux -a archive fichier
	if(!strcmp(argv[1],"-a"))
	{
		if(argc>=4)
		{
			action=AJOUTER_FICHIER;

			// réserver des char et copier le nom de l'archive
			nom_archive=new char[strlen(argv[2])+1]; // 0 terminal
			strcpy(nom_archive,argv[2]);

			// réserver des char et copier le nom du fichier à ajouter
			nom_fichier=new char[strlen(argv[3])+1];
			strcpy(nom_fichier,argv[3]);

			algo_compression=AUTO;

			if(argc==5)
			{ // il y a aussi un commutateur pour le mode de compression
				if(!strcmp(argv[4],"-copie"))
					algo_compression=COPIE;
				
				if(!strcmp(argv[4],"-huff"))
					algo_compression=HUFFMAN;

				if(!strcmp(argv[4],"-rle"))
					algo_compression=RLE;

				if(!strcmp(argv[4],"-lzw"))
					algo_compression=LZW;
			}
			return action;
		}
	}

	// minux -v archive
	if(!strcmp(argv[1],"-v"))
	{
		if(argc==3)
		{
			action=VOIR_ARCHIVE;

			// réserver des char et copier le nom de l'archive
			nom_archive=new char[strlen(argv[2])+1]; // 0 terminal
			strcpy(nom_archive,argv[2]);

			return action;
		}
	}

	// minux -x archive destination
	if(!strcmp(argv[1],"-x"))
	{
		if(argc==4)
		{
			action=EXTRAIRE_ARCHIVE;

			// réserver des char et copier le nom de l'archive
			nom_archive=new char[strlen(argv[2])+1]; // 0 terminal
			strcpy(nom_archive,argv[2]);

			// réserver des char et copier le nom du fichier à ajouter
			destination=new char[strlen(argv[3])+1];
			strcpy(destination,argv[3]);

			return action;
		}
	}

	// minux -e archive fichier destination
	if(!strcmp(argv[1],"-e"))
	{
		if(argc==5)
		{
			action=EXTRAIRE_FICHIER;

			// réserver des char et copier le nom de l'archive
			nom_archive=new char[strlen(argv[2])+1]; // 0 terminal
			strcpy(nom_archive,argv[2]);

			// réserver des char et copier le nom du fichier 
			nom_fichier=new char[strlen(argv[3])+1];
			strcpy(nom_fichier,argv[3]);

			// réserver des char et copier le nom du fichier 
			destination=new char[strlen(argv[4])+1];
			strcpy(destination,argv[4]);

			return action;
		}
	}

	return action;
}

void aide()
{
	printf("minux\n");
	printf("\tutilisation:\n");
	printf("minux -c archive\tcréer une archive\n");
	printf("minux -a archive fichier <-copie|-rle|-huff|-lzw>\tajouter un fichier\n");
	printf("minux -v archive\tvoir le contenu d'une archive\n");
	printf("minux -x archive destination\textraire l'archive dans destination\n");
	printf("minux -e archive fichier destination\textraire le fichier dans destination\n");
}

int main(int argc, char* argv[])
{
	switch(analyse_ligne_commande(argc,argv))
	{
	case AIDE:
		aide();
		break;
	case CREER_ARCHIVE:
		creer_archive(nom_archive);
		break;
	case AJOUTER_FICHIER:
		ajouter_fichier(nom_fichier,nom_archive);
		break;
	case EXTRAIRE_ARCHIVE:
		extraire(destination,nom_archive);
		break;
	case VOIR_ARCHIVE:
		verifier_archive(nom_archive);
	}
	return 0;
}

