module Gitlab
  module Ci
    module Build
      class Step
        WHEN_ON_FAILURE = 'on_failure'.freeze
        WHEN_ON_SUCCESS = 'on_success'.freeze
        WHEN_ALWAYS = 'always'.freeze

        attr_reader :name
        attr_accessor :script, :timeout, :when, :allow_failure

        class << self
          def from_commands(job)
            self.new(:script).tap do |step|
              step.script = job.options[:before_script].to_a + job.options[:script].to_a
              step.script = job.commands.split("\n") if step.script.empty?
              step.timeout = job.metadata_timeout
              step.when = WHEN_ON_SUCCESS
            end
          end

          def from_after_script(job)
            after_script = job.options[:after_script]
            return unless after_script

            self.new(:after_script).tap do |step|
              step.script = after_script
              step.timeout = job.metadata_timeout
              step.when = WHEN_ALWAYS
              step.allow_failure = true
            end
          end
        end

        def initialize(name)
          @name = name
          @allow_failure = false
        end
      end
    end
  end
end
