package ftp_client;
import java.util.ArrayList;

// Classe de fonctions statiques permettant de gerer l'enregistrement et le chargement des comptes FTP
public class ConnectionManager {
	/* FTPInfos File Name */
	private static final String fileName = "ftp.data"; // Les comptes FTP seront enregistres dans "ftp.data"
	
	/* Read the ArrayList<FTPInfo> file */
	// Lecture des comptes FTP
	// Obliger de supprimer le warning pour le cast
	@SuppressWarnings("unchecked")
	public static ArrayList<FTPInfo> readFTPInfos(){
		// On lit le ArrayList<FTPInfo> enregistre en binaire dans le fichier
		return (ArrayList<FTPInfo>)Misc.readObjectFromFile(fileName);
	}
	
	/* Write the ArrayList<FTPInfo> file */
	// Enregistrement des comptes FTP
	public static boolean writeFTPInfos(final ArrayList<FTPInfo> ftps){
		// On enregistre en binaire le ArrayList<FTPInfo> dans le fichier
		return Misc.writeFileFromObject(fileName, ftps);
	}
	
	/* Try to add a FTPInfo into the ArrayList */
	// Tentative d'ajout du compte FTP
	public static boolean addFTPInfo(final ArrayList<FTPInfo> fis, final FTPInfo fi){
		// On verifie si il n'y a aucun equivalent (voir FTPInfo.equals())
		for(FTPInfo f : fis)
			if(f.equals(fi)) return false; // Si c'est le cas, retourner false
		// Autrement on rajoute le compte
		fis.add(fi);
		// Et on retourne vrai
		return true;
	}
	
	/* Update a FTPInfo in the ArrayList */
	// Tentative de mise a jour du compte FTP a a un certain indice
	public static boolean changeFTPInfo(final ArrayList<FTPInfo> fis, final int idx, final FTPInfo fi){
		// Si l'indice deborde, retourner faux
		if(idx<0 || idx>fis.size()) return false;
		// Si il y a un equivalent au compte, retourner faux
		for(FTPInfo f : fis)
			if(f.equals(fi)) return false;
		// Autrement effacer le compte a l'indice idx
		fis.remove(idx);
		// Puis rajouter le nouveau compte, au meme indice
		fis.add(idx, fi);
		// Retourner vrai
		return true;
	}
	
}
