package ListNGo;

import java.util.ArrayList;
import java.util.Scanner;


public class listNGo {
	
	public class ListeDeCourses{
		int Id;
		String nom;
		double montantTotal;
		String moyenPaiement;
		
		ArrayList<Article> lesArticles = new ArrayList<Article>();
		
		public ListeDeCourses(String unNom) {
			this.nom = unNom;
			this.montantTotal = 0;
			this.moyenPaiement = null;
		}
		
		public void AjouterArticle(Article unArticle)
		{
			lesArticles.add(unArticle);
			MAJMontantTotal();
		}
		
		public void SetMoyenPaiement(String unMoyenPaiement)
		{
			this.moyenPaiement = unMoyenPaiement;
		}
		
		public void MAJMontantTotal()
		{
			this.montantTotal = 0;
			for(Article a : lesArticles) {
				this.montantTotal = this.montantTotal + a.prix;
			}
		}
		
		public ArrayList<Article> GetLesArticles()
		{
			return lesArticles;
		}
		
		public void AfficherListe()
		{
			System.out.println("List'N'Go");
			System.out.println("==========");
			System.out.println("Liste : " + this.nom);
			System.out.println("==========");
			System.out.println("Article / Quantité / Prix");
			for(Article a : lesArticles) {
				a.AfficherArticle();
			}
			System.out.println("==========");
			System.out.println("Total : " + this.montantTotal + "€");
		}
	}
	
	public class Utilisateur {
		int Id;
		String nom;
		String prenom;
		String adresse;
		String numTel;
		String cp;
		String ville;
		String email;
		String mdp;
		
		public Utilisateur(String unNom, String unPrenom, String uneAdresse, String unNumTel, String unCp, String uneVille, String unEmail, String unMdp)
		{
			this.nom = unNom;
			this.prenom = unPrenom;
			this.adresse = uneAdresse;
			this.numTel = unNumTel;
			this.cp = unCp;
			this.ville = uneVille;
			this.email = unEmail;
			this.mdp = unMdp;
		}
		
	}
	
	public class Article{
		int Id;
		String nom;
		int quantite;
		double poids;
		double prix;
		//String codeBarre;
		
		public Article(String unNom, int uneQuantite, double unPrix) {
			this.nom = unNom;
			this.quantite = uneQuantite;
			this.prix = uneQuantite * unPrix;
		}
		
		/*public Article(String unNom, double unPoids, double unPrix) {
			this.nom = unNom;
			this.poids = unPoids;
			this.prix = unPrix;
		}*/
		
		public void AfficherArticle()
		{
			System.out.println(this.nom + "    " + this.quantite + "    " + this.prix + "€");
		}
	}
	
	
	
	public class BaseDeDonnee{
		
		ArrayList<ListeDeCourses> lesListesDeCourses = new ArrayList<ListeDeCourses>();
		
		public BaseDeDonnee()
		{
			
		}
		
		public void AddListeDeCourses(ListeDeCourses uneListeDeCourses)
		{
			this.lesListesDeCourses.add(uneListeDeCourses);
		}
		
		public ArrayList<ListeDeCourses> GetLesListesDeCourses()
		{
			return lesListesDeCourses;
		}
	}
	
	public static void main(String[] args)
	{
		listNGo lng = new listNGo();
		BaseDeDonnee bdd = lng.new BaseDeDonnee();
		Scanner sc = new Scanner(System.in);
		System.out.println("Bienvenue sur List'n'Go");
		System.out.println("===================");
		System.out.println("Entrez votre nom :");
		String nomUtilisateur = sc.nextLine();
		System.out.println("Entrez votre prenom :");
		String prenomUtilisateur = sc.nextLine();
		System.out.println("Entrez votre adresse :");
		String adresseUtilisateur = sc.nextLine();
		System.out.println("Entrez votre numéro de téléphone :");
		String numTelUtilisateur = sc.nextLine();
		System.out.println("Entrez votre Code Postal :");
		String CPUtilisateur = sc.nextLine();
		System.out.println("Entrez votre ville :");
		String villeUtilisateur = sc.nextLine();
		System.out.println("Entrez votre email :");
		String emailUtilisateur = sc.nextLine();
		System.out.println("Entrez votre motDePasse :");
		String MDPUtilisateur = sc.nextLine();
		Utilisateur u = lng.new Utilisateur(nomUtilisateur, prenomUtilisateur, adresseUtilisateur, numTelUtilisateur, CPUtilisateur, villeUtilisateur, emailUtilisateur, MDPUtilisateur);
		int appStop = 0;
		System.out.println("Bonjour" + u.prenom);
		while(appStop == 0) {
			lng.Menu1();
			int choix = Integer.parseInt(sc.nextLine());
			switch(choix) {
			case 1 : 
				System.out.println("Comment voulez-vous appeler votre liste ?");
				String nomListe = sc.nextLine();
				ListeDeCourses ldc = lng.new ListeDeCourses(nomListe);
				int artStop = 0;
				bdd.AddListeDeCourses(ldc);
				while(artStop == 0) {
					lng.Menu2_1();
					int choix2 = Integer.parseInt(sc.nextLine());
					switch(choix2) {
					case 1 : 
						System.out.println("Quel est le nom de votre article ?");
						String nomArticle = sc.nextLine();
						System.out.println("Quelle quantitée voulez-vous ?");
						int quantiteArticle = Integer.parseInt(sc.nextLine());
						System.out.println("Quel est le prix de votre article (Unitaire) ?");
						double prixArticle = Double.parseDouble(sc.nextLine());
						Article a = lng.new Article(nomArticle, quantiteArticle, prixArticle);
						ldc.AjouterArticle(a);
						System.out.println("Article ajouté");
						break;
					case 2 :
						System.out.println("Voici votre liste :");
						ldc.AfficherListe();
						break;
					case 3 :
						System.out.println("Merci pour vos achats" + u.prenom + " " + u.nom);
						System.out.println("==========");
						ldc.AfficherListe();
						System.out.println("Commande payée");
						System.out.println("Moyen de paiement : Paypal N°XXX XXX XXX");
						System.out.println("==========");
						System.out.println("Livré a ");
						System.out.println(u.prenom + " " + u.nom);
						System.out.println(u.adresse);
						System.out.println(u.cp + " " + u.ville);
						System.out.println("==========");
						System.out.println("Numéro de téléphone :" + u.numTel);
						System.out.println("Coordonées :");
						System.out.println("Email :" + u.email);
						System.out.println("==========");
						System.out.println("Copyright List'N'Go - Do Not Distribute");
						artStop = 1;
						break;
					case 4 :
						artStop = 1;
						break;
					}
				}
				break;
			case 2 :
				for(ListeDeCourses ldcs : bdd.GetLesListesDeCourses()) {
					System.out.println(ldcs.nom);
				}
				break;
			case 3 :
				appStop = 1;
				break;
			}
		}
		sc.close();
	}
	
	void Menu1(){
		System.out.println("Choisissez votre action : ");
		System.out.println("1. Créer une liste de courses");
		System.out.println("2. Voir les listes de courses");
		System.out.println("3. Quitter");
	}
	
	void Menu2_1(){
		System.out.println("Choisissez votre action : ");
		System.out.println("1. Ajouter un article");
		System.out.println("2. Voir les articles de  la liste");
		System.out.println("3. Payer");
		System.out.println("4. Quitter");
	}

}
