package biduledres;

import java.util.*;

public class PolyedreSpatial implements SerialisableXML {
    ListeSommetSpatial listeSommetSpatial = new ListeSommetSpatial();
    ListeAreteSpatiale listeAreteSpatiale = new ListeAreteSpatiale(); // A SUPPRIMER
    ListeFaceSpatiale listeFaceSpatiale = new ListeFaceSpatiale();
    
    Polyedre polyedre;
    Espace espace;
    
    public PolyedreSpatial(Polyedre polyedre, Espace espace) {
        this.polyedre = polyedre;
        this.espace = espace;
        positionneSommetsFaces();
    }
    
    private void positionneSommetsFaces() {
        Hashtable tableSommets = new Hashtable();
        
        Iterator iSommets = polyedre.getListeSommet().iterator();
        while(iSommets.hasNext()) {
            Sommet sommet = (Sommet) iSommets.next();
            SommetSpatial sommetSpatial = espace.getPosition(sommet);
            listeSommetSpatial.add(sommetSpatial);
            tableSommets.put(sommet, sommetSpatial);
        }
        
        Iterator iAretes = polyedre.getListeArete().iterator();
        while(iAretes.hasNext()) {
            Arete arete = (Arete) iAretes.next();
            SommetSpatial s1 = (SommetSpatial) tableSommets.get(arete.getSommet1());
            SommetSpatial s2 = (SommetSpatial) tableSommets.get(arete.getSommet2());
            listeAreteSpatiale.add(new AreteSpatiale(
            (SommetSpatial) tableSommets.get(arete.getSommet1()), (SommetSpatial) tableSommets.get(arete.getSommet2())));
        }
        
        Iterator iFaces = polyedre.getListeFace().iterator();
        while(iFaces.hasNext()) {
            Face face = (Face) iFaces.next();
            FaceSpatiale faceSpatiale = new FaceSpatiale();
            Iterator jSommets = face.iterator();
            while(jSommets.hasNext()) {
                SommetSpatial sommetSpatial = (SommetSpatial) tableSommets.get((Sommet) jSommets.next());
                faceSpatiale.add(sommetSpatial);
            }
            listeFaceSpatiale.add(faceSpatiale);
        }
    }
    
    public ListeSommetSpatial getListeSommetSpatial() {
        return this.listeSommetSpatial;
    }
    
    public ListeAreteSpatiale getListeAreteSpatiale() {
        return this.listeAreteSpatiale;
    }
    
    public ListeFaceSpatiale getListeFaceSpatiale() {
        return this.listeFaceSpatiale;
    }
    
    public String toXML(int tab) {
        return Util.printTab(tab, "<PolyedreSpatial nombreSommets=\"" + getListeSommetSpatial().size() + "\" nombreAretes=\"" + getListeAreteSpatiale().size()+ "\">") +
        getListeSommetSpatial().toXML(tab + 1) +
        getListeFaceSpatiale().toXML(tab + 1) +
        Util.printTab(tab, "</PolyedreSpatial>");
    }
    
    public String toXML() {
        return toXML(0);
    }
    
}