#!/usr/bin/env ruby

# A script to automatically generate SQL files from an interface definition.
# To be called like this: sql-template-renderer interface.yaml sql-template.erb

require 'yaml'
require 'erb'

class SqlTemplateRenderer

  DATASERVICES_CLIENT_SCHEMA = 'cdb_dataservices_client'
  DATASERVICES_SERVER_SCHEMA = 'cdb_dataservices_server'

  def initialize(template_file, function_signature)
    @function_signature = function_signature
    @template = File.read(template_file)
  end

  def render
    ERB.new(@template).result(binding)
  end

  def name
    @function_signature['name']
  end

  def return_type
    @function_signature['return_type']
  end

  def user_config_key
    @function_signature['user_config_key']
  end

  def geocoder_config_key
    @function_signature['geocoder_config_key']
  end

  def params
    @function_signature['params'].map { |p| p['name'] }.join(', ')
  end

  def params_with_type
    @function_signature['params'].map { |p| "#{p['name']} #{p['type']}" }.join(', ')
  end

  def params_with_type_and_default
    parameters = @function_signature['params'].map do |p|
      if not p['default'].nil?
        "#{p['name']} #{p['type']} DEFAULT #{p['default']}"
      else
        "#{p['name']} #{p['type']}"
      end
    end
    return parameters.join(', ')
  end
end


if ARGV.length != 2 then
  puts "Usage: sql-template-renderer <interface.yaml> <template.erb>"
  exit
end

interface_source_file = ARGV[0]
template_file = ARGV[1]


functions = YAML.load(File.open(interface_source_file))

functions.each do |f|
  puts SqlTemplateRenderer.new(template_file, f).render
end
