#!/usr/bin/env ruby

require 'rubygems'
require 'abiquo-etk'

def create_schemas(user = 'root', password = '')
  log = AETK::Log.instance
  cmd = ''
  if password.strip.chomp.empty? 
    cmd = "mysql -u #{user} "
  else
    cmd = "mysql -u #{user} -p#{password} "
  end

  if `#{cmd} -e 'show databases'|grep kinton`.strip.chomp.empty?
    cib = false
    if File.exist? '/etc/abiquo-release'
      if File.readlines('/etc/abiquo-release').join =~ /cloud-in-a-box/
        log.info 'Cloud in a Box profile found'
        cib = true
      end
    end
    if cib
      out = `mysql -u root < /usr/share/doc/abiquo-16-pocsetup/cloud-in-a-box.sql`
      if $?.exitstatus == 0 
        log.info 'cloud-in-a-box schema imported succesfully.'
      else
        log.error "Error importing cloud-in-a-box schema: #{out}"
      end
    else
      out = `mysql -u root < /usr/share/doc/abiquo-server/database/kinton-schema.sql`
      if $?.exitstatus == 0 
        log.info 'kinton-schema imported succesfully.'
      else
        log.error "Error importing kinton-schema: #{out}"
      end
      out = `mysql -u root < /usr/share/doc/abiquo-server/database/kinton-premium-schema.sql`
      if $?.exitstatus == 0 
        log.info 'kinton-premium-schema imported succesfully.'
      else
        log.error "Error importing kinton-premium-schema: #{out}"
      end
    end
  else
    log.warn 'kinton schema found. Skipping schema creation.'
  end
  
end

def init_server_install
  config_file ='/etc/sysconfig/abiquo-server'
  log = AETK::Log.instance

  log.info "Server install detected. Setting up the environment."
  begin
    if File.exist? config_file 
      @settings = abiquo_server_settings
    else
      log.error "Config file #{config_file} does not exist. Exit."
      exit
    end

    log.info "Setting EventSink URL"
    `abicli set event-sink-url http://#{@settings['abiquo_server_ip']}/server/EventSink`
    
    log.info "Setting DB Properties"
    `abicli set database-host #{@settings['abiquo_db_host']}`
    `abicli set database-user root`
    `abicli set database-password #{@settings['abiquo_db_password']}`
    `abicli set mail-server 127.0.0.1`
      
    log.info "Creating database schemas..."
    create_schemas
  rescue Exception => e
    log.error "Unhandled exception: #{e.message}"
    log.error "Unhandled exception: #{e.backtrace}"
  end
end

def init_remote_services_install
  config_file ='/etc/sysconfig/abiquo-rs'

  log = AETK::Log.instance
  log.info "Remote Services install detected. Setting up the environment."

  begin
    @settings = {}
    if File.exist? config_file
      @settings = abiquo_rs_settings
    else
      log.error "Config file #{config_file} does not exist. Exit."
      exit
    end
    repo = @settings['abiquo_nfs_repository']
    if repo =~ /localhost|127.0.0.1/
      if File.exist? '/etc/sysconfig/abiquo-server'
        log.info "NFS Repository points to localhost, fixing..."
        s = abiquo_server_settings
        repo = s['abiquo_server_ip'] + ':/opt/vm_repository'
      end
    end
    log.info "Setting nfs-repository to #{repo}"
    `abicli set nfs-repository #{repo}`
    log.info "Setting cifs-repository to #{repo}"
    `abicli set cifs-repository //your-cifs-server-ip-here/opt/vm_repository`

  rescue Exception => e
    log.error "Unhandled exception: #{e.message}"
    log.error "Unhandled exception: #{e.backtrace}"
  end
end

def init_v2v_install
  config_file ='/etc/sysconfig/abiquo-server'
  log = AETK::Log.instance
  log.info "V2V install detected. Setting up the environment."
end

def init_rs_plus_v2v_install
  init_remote_services_install
  init_v2v_install
end

AETK::Log.instance.info "Running abiquo-initenv..."
case AETK::System.detect_install_type 
when :server
  init_server_install
when :remote_services
  init_remote_services_install
when :v2v
  init_v2v_install
when :rs_plus_v2v
  init_rs_plus_v2v_install
else
  AETK::Log.instance.error "Couldn't detect install type. Skipping first setup."
end
