class Pangea::DirectoryRenderer

def artifact_json

def artifact_json
  File.join(init_dir, %(artifact.tf.json))
end

def create_prepped_state_directory(dir, synthesis)

def create_prepped_state_directory(dir, synthesis)
  system %(mkdir -p #{dir}) unless Dir.exist?(dir)
  File.write(File.join(dir, %(artifact.tf.json)), JSON[synthesis])
  system %(cd #{dir} && #{BIN} init -json) unless Dir.exist?(File.join(dir, %(.terraform)))
  true
end

def home_dir

def home_dir
  %(#{Dir.home}/.pangea)
end

def infra_dir

def infra_dir
  %(#{home_dir}/infra)
end

def init_dir

def init_dir
  %(#{infra_dir}/init)
end

def plan(dir)

def plan(dir)
  pretty(JSON[File.read(File.join(dir, %(plan.json)))])
end

def pretty(content)

def pretty(content)
  JSON.pretty_generate(content)
end

def render_component(&block)

with available attributes
component is a single resource wrapped in state
def render_component(&block)
  synthesizer.synthesize(&block)
  resource_type = synthesizer.synthesis[:resource].keys[0]
  resource_name = synthesizer.synthesis[:resource][synthesizer.synthesis[:resource].keys[0]].keys[0]
  dir = File.join(init_dir, resource_type.to_s, resource_name.to_s)
  create_prepped_state_directory(dir, synthesizer.synthesis)
  system %(cd #{dir} && #{BIN} apply -auto-approve)
  synthesizer.clear_synthesis!
  {
    resource: resource(dir),
    state: state(dir),
    plan: plan(dir)
  }
end

def resource(dir)

def resource(dir)
  JSON[File.read(File.join(dir, %(artifact.tf.json)))]
end

def state(dir)

def state(dir)
  pretty(JSON[File.read(File.join(dir, %(terraform.tfstate)))])
end