package model.Elements;


import model.Elements.Extinguisher.Cloud;
import model.Elements.Extinguisher.Extinguisher;
import model.Elements.Extinguisher.FireFighter;
import model.Elements.Extinguisher.MotorizedFireFighter;
import model.Elements.Obstacle.Mountain;
import model.Elements.Obstacle.Obstacle;
import model.Elements.Obstacle.Road;
import model.Elements.Obstacle.Rocaille;
import util.Position;


public enum ModelElement {

  FIREFIGHTER(5),
  FIRE(25),
  CLOUD(10),
  ROAD(5),
  MOUNTAIN(5),
  ROCAILLE(3),
  MOTORIZEDFIREFIGHTER(3);


  private final int initialNumber;



  ModelElement(int initialNumber) {
    this.initialNumber = initialNumber;
  }

  public int getInitialNumber(){
    return this.initialNumber;
  }

  public Element getModelElementClass(Position position){
    return switch (this){
      case FIRE -> new Fire(position);
      case ROAD -> new Road(position);
      case FIREFIGHTER -> new FireFighter(position);
      case CLOUD -> new Cloud(position);
      case MOUNTAIN -> new Mountain(position);
      case ROCAILLE -> new Rocaille(position);
      case MOTORIZEDFIREFIGHTER -> new MotorizedFireFighter(position);
      default -> throw new IllegalArgumentException("Unknown ModelElement: " + this);
      };

    }





  public boolean isObstacle() {
    return this.getModelElementClass(null) instanceof Obstacle;

  }
  public boolean isExtinguisher(){
    return this.getModelElementClass(null) instanceof Extinguisher;
  }





}