# *********************************************************************************
# URBANopt (tm), Copyright (c) Alliance for Sustainable Energy, LLC.
# See also https://github.com/urbanopt/urbanopt-scenario-gem/blob/develop/LICENSE.md
# *********************************************************************************

module URBANopt
  module Scenario
    class SimulationDirBase
      ##
      # SimulationDirBase is the agnostic representation of a directory of simulation input files.
      ##
      # [parameters:]
      # * +scenario+ - _ScenarioBase_ - Scenario containing this SimulationDirBase.
      # * +features+ - _Array_ - Array of Features that this SimulationDirBase represents.
      # * +feature_names+ - _Array_ - Array of scenario specific names for these Features.
      def initialize(scenario, features, feature_names)
        @scenario = scenario
        @features = features
        @feature_names = feature_names
      end

      attr_reader :scenario, :features, :feature_names #:nodoc: #:nodoc: #:nodoc:

      ##
      # Return the directory that this simulation will run in
      ##
      def run_dir
        raise 'run_dir is not implemented for SimulationFileBase, override in your class'
      end

      ##
      # Return true if the simulation is out of date (input files newer than results), false otherwise.
      # Non-existant simulation input files are out of date.
      ##
      def out_of_date?
        raise 'out_of_date? is not implemented for SimulationFileBase, override in your class'
      end

      ##
      #  Returns simulation status one of {'Not Started', 'Started', 'Complete', 'Failed'}
      ##
      def simulation_status
        raise 'simulation_status is not implemented for SimulationFileBase, override in your class'
      end

      ##
      # Clear the directory that this simulation runs in
      ##
      def clear
        raise 'clear is not implemented for SimulationFileBase, override in your class'
      end

      ##
      # Create run directory and generate simulation inputs, all previous contents of directory are removed
      ##
      def create_input_files
        raise 'create_input_files is not implemented for SimulationFileBase, override in your class'
      end
    end
  end
end