#
# Cookbook:: irrigate-vector
# Recipe:: vector_deploy_worker
#

if node.platform_family?('windows')
  if node['vector']['deploy']['credentials_data_bag_name'] && !node['vector']['deploy']['credentials_data_bag_name'].empty?
    deploy_credentials     = data_bag_item('secrets', node['vector']['deploy']['credentials_data_bag_name'])
    ssh_private_key        = deploy_credentials['ssh_private_key'].chomp
    aws_access_key_id      = deploy_credentials['aws_access_key_id'].chomp
    aws_secret_access_key  = deploy_credentials['aws_secret_access_key'].chomp
    svn_password           = deploy_credentials['svn_password'].chomp
    github_access_token    = deploy_credentials['github_access_token'].chomp
    sentry_dsn             = deploy_credentials['sentry_dsn'].chomp
  else
    raise 'Deploy credential data bag must be specified'
  end

  if node['vector']['deploy']['physical_location'] == 2
    task_service_user_hash = node['vector']['deploy']['nyc_vector_worker_credentials']
  elsif node['vector']['deploy']['physical_location'] == 1
    task_service_user_hash = node['vector']['deploy']['avl_vector_worker_credentials']
  elsif node['vector']['deploy']['physical_location'] == 7
    task_service_user_hash = node['vector']['deploy']['qa_vector_worker_credentials']
  else
    raise 'Physical location must be specified.'
  end

  worker_type = node['vector']['deploy']['worker_type']
  task_service_user_databag = task_service_user_hash[worker_type.to_s]
  task_service_user_credentials = data_bag_item('secrets', task_service_user_databag)
  task_service_user = task_service_user_credentials['user'].chomp
  task_service_password = task_service_user_credentials['password'].chomp

  application 'C:\python-vector-utils' do
    git 'git@github.com:theorchard/python-vector-utils.git' do
      deploy_key ssh_private_key
    end
  end

  aws_config_directory = 'C:\.aws'
  directory aws_config_directory do
    rights :full_control, task_service_user
  end

  # Create aws config file to read from SQS queue for messages with svn tag
  template "#{aws_config_directory}\\config" do
    source 'config.erb'
    rights :full_control, task_service_user
    sensitive true
    variables(
      aws_access_key_id: aws_access_key_id,
      aws_secret_access_key: aws_secret_access_key
    )
  end

  if node['vector']['deploy']['apple_server'] == false
    apple_or_general = 'general'
  elsif node['vector']['deploy']['apple_server'] == true
    apple_or_general = 'apple'
  else
    raise "Can't determine if server is for apple itunes."
  end

  # Determine worker config path to copy from staged location
  encoder_id = node['vector']['deploy']['encoder_id']
  worker_type_config_path = worker_type + '\\' + encoder_id + '\\' + apple_or_general.to_s

  # Create .env file required for direct_delivery deployment process
  dd_root_directory = node['vector']['root_directory']
  deploy_root_directory = node['vector']['deploy']['deploy_root_directory']
  environment = node['vector']['environment']
  logger_dsn = node['vector']['logger_dsn']
  template "#{deploy_root_directory}\\.env" do
    source 'env.erb'
    rights :full_control, task_service_user
    sensitive true
    variables(
      environment: environment,
      sentry_dsn: sentry_dsn,
      logger_dsn: logger_dsn,
      github_access_token: github_access_token,
      dd_root_directory: dd_root_directory,
      svn_password: svn_password,
      worker_type_config_path: worker_type_config_path
    )
  end

  # Create task to update local direct_delivery repo
  deploy_task = node['vector']['deploy']['number_of_deploy_tasks']
  (1..deploy_task.to_i).each do |deploy_task_number|
    windows_task "deploy_tag_#{deploy_task_number}" do
      command              "#{deploy_root_directory}\\deploy.bat"
      cwd                  deploy_root_directory
      execution_time_limit '600'
      force                true
      frequency            :minute
      frequency_modifier   30
      user                 task_service_user
      password             task_service_password
      interactive_enabled  false
      random_delay         '30'
      run_level            :limited
      start_day            '01/01/2020'
      start_time           '00:00'
      action               :create
    end
  end
end
