package fr.controller;



import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Iterator;

import TPnote.*;

public class Base {

	public static Ville v;

	public static void charger(String nomFic){
		String fichier=nomFic;
		try{
			InputStream is=new FileInputStream(fichier);
			InputStreamReader isr=new InputStreamReader(is);
			BufferedReader br=new BufferedReader(isr);
			String ligne = br.readLine();
			v= new Ville(ligne);

			while (ligne!=null){
				String adresse, type;
				double surface;
				int prix;
				type=ligne=br.readLine();
				adresse = ligne=br.readLine();
				surface = Double.parseDouble(ligne=br.readLine());
				prix = Integer.parseInt(ligne=br.readLine());

				if (type.equals("Immeuble")){

					int nbLogements;
					boolean parking;

					nbLogements = Integer.parseInt(ligne=br.readLine());
					parking = Boolean.parseBoolean(ligne=br.readLine());
					v.addBatiment(new Immeuble(adresse,surface,prix,nbLogements,parking));
				}
				else if (ligne.equals("Residence")){
					boolean jardin;

					jardin = Boolean.parseBoolean(ligne=br.readLine());
					v.addBatiment(new Residence(adresse,surface,prix,jardin));
				}
			}
			br.close();
		}
		catch (NumberFormatException e) {
			e.printStackTrace();
		}
		catch (NullPointerException e) {
			e.printStackTrace();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
	}

	public static void serialiserDonnees(String nomFic){
		try {
			FileOutputStream file = new FileOutputStream(nomFic);
			ObjectOutputStream oos = new ObjectOutputStream(file);
			for (int i=0;i<v.listHab.size();i++){
				oos.writeObject(v.listHab.get(i));
			}
			oos.flush();
			oos.close();
		}
		catch (java.io.IOException e) {
			e.printStackTrace();
		}
	}

	public static void deserialiserDonnees(String nomFic){
		try {
			FileInputStream file = new FileInputStream (nomFic);
			ObjectInputStream ois = new ObjectInputStream (file);
			Object read;
			Habitation h;
			while((read = (Habitation)ois.readObject()) != null ){
				h = (Habitation) read;
				String adresse;
				double surface;
				int prix;

				adresse = h.getAdresse();
				surface = h.getSurface();
				prix = h.getPrix();

				if (h instanceof Immeuble){
					int nbLogements;
					boolean parking;
					nbLogements = ((Immeuble) h).getNbLogement();
					parking = ((Immeuble) h).isParking();
					v.addBatiment(new Immeuble(adresse,surface,prix,nbLogements,parking));
				}
				else if (h instanceof Residence){
					boolean jardin;
					jardin = ((Residence) h).isJardin();
					v.addBatiment(new Residence(adresse,surface,prix,jardin));
				}
			}
			ois.close();
		}
		catch (java.io.IOException e) {
			e.printStackTrace();
		}
		catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}


	public static void view() {
		System.out.println(v.getNom()+"\n-----------------");
		for(Habitation h : v.listHab) {
			System.out.println(h +"\n");

		}
	}


	public static Habitation getRapport(){
		Habitation h = null;
		double max = 0;
		double temp = 0;

		Iterator<Habitation> iter=v.getListHab().iterator();
		while(iter.hasNext()){
			iter.next().getPrix();
			iter.next().getSurface();
			temp=iter.next().getSurface()/iter.next().getPrix();
			if(temp>max){
				max=temp;
				h=iter.next();
			}	
		}
		return h;

	}
}


