package app;

import java.io.IOException;
import java.net.URL;

import controller.Controller;
import javafx.application.Platform;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class SimulatorApplication extends javafx.application.Application {
  private static final String VIEW_RESOURCE_PATH = "/view/view.fxml";
  private static final String APP_NAME = "Firefighter simulator";
  public static final int ROW_COUNT = 40;
  public static final int COLUMN_COUNT = 40;
  public static final int BOX_WIDTH = 25;
  public static final int BOX_HEIGHT = 25;
  public static final int INITIAL_FIRE_COUNT = 8;
  public static final int INITIAL_FIREFIGHTER_COUNT = 12;
  public static final int INITIAL_MOTORIZED_FIREFIGHTER_COUNT = 8;
  public static final int INITIAL_CLOUD_COUNT = 8;
  public static final int INITIAL_MOUNTAIN_COUNT= 6;
  public static final int INITIAL_ROCKERTY_COUNT= 3;
  public static final int TURNS_FOR_SPAWNING_AIRTANKER = 10;
  public static final int PAPER_COUNT = 10;
  public static final int ROCK_COUNT = 10;
  public static final int CISOR_COUNT = 10;
  public static final int DOCTOR_COUNT = 10;
  public static final int PATIENT_COUNT = 70;
  public static final int VIRUS_COUNT = 6;

  public static String[] arguments;
  private Stage primaryStage;
  private Parent view;

  private void initializePrimaryStage(Stage primaryStage) {
    this.primaryStage = primaryStage;
    this.primaryStage.setTitle(APP_NAME);
    this.primaryStage.setOnCloseRequest(event -> Platform.exit());
    this.primaryStage.setResizable(true);
    this.primaryStage.sizeToScene();
  }

  @Override
  public void start(@SuppressWarnings("exports") Stage primaryStage) throws IOException {
    initializePrimaryStage(primaryStage);
    initializeView();
    showScene();
  }

  private void initializeView() throws IOException {
    FXMLLoader loader = new FXMLLoader();
    URL location = SimulatorApplication.class.getResource(VIEW_RESOURCE_PATH);
    loader.setLocation(location);
    view = loader.load();
    Controller controller = loader.getController();
    if(SimulatorApplication.arguments == null){
      SimulatorApplication.arguments = new String[1];
      SimulatorApplication.arguments[0] = "firefighter";
      System.out.println("No argument were provided, starting firefighter");
    }
    switch(SimulatorApplication.arguments[0]){
      case "pfc":
        controller.initializePfc();
        break;
      case "firefighter":
        controller.initializeFireFighter();
        break;
      case "doctor":
        controller.initializeDoctor();
        break;
    }

  }

  private void showScene() {
    Scene scene = new Scene(view);
    primaryStage.setScene(scene);
    primaryStage.show();
  }

  public static void main(String[] args) {
    arguments = args;
    launch(args);
  }
}