package fr.umlv.tpnote2;

import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Objects;

public class PostOffice {
  //1 private final ArrayList<House> houses = new ArrayList<>();
  private final LinkedHashSet<Building> buildings = new LinkedHashSet<>();
  private final HashMap<String, Building> cache = new HashMap<>();
  
  public House createHouse() {
    House house = new House(this);
    buildings.add(house);
    return house;
  }
  
  public CityBuilding createCityBuilding(String name) {
    CityBuilding cityBuilding = new CityBuilding(name);
    buildings.add(cityBuilding);
    return cityBuilding;
  }
  
  public void post(String identifier, String message) {
    Objects.requireNonNull(identifier);
    Objects.requireNonNull(message);
    
    boolean broadcast = identifier.equals("city");
    
    if (!broadcast) {
      Building cachedBuilding = cache.get(identifier);
      if (cachedBuilding != null) {
        if (cachedBuilding.addToMailBox(identifier, message)) {
          return;
        }
        cache.remove(identifier);
      }
    }
    
    for(Building building: buildings) {
      if (building.addToMailBox(identifier, message)) {
        cache.put(identifier, building);
        if (!broadcast) {
          return; 
        }
      }
    }
    
    //3
    if (!broadcast) {
      System.out.println("message " + message + " was not delivered");
    }
  }
}
