#
# Cookbook:: irrigate-apache
# Recipe:: qa_sugarcrm
#
# Copyright:: The Orchard
#

if platform_family?('rhel')
  if node['platform_version'].start_with?('7')

    # There are extra required packages that are provided by the base
    # and/or apache-specific cookbooks. This array is purpose-specific.
    packages = %w(
      unzip
      zip
    )

    packages.each do |name|
      package name
    end

    # SugarCRM recommends memcached for session storage
    service 'memcached' do
      supports restart: true, status: true, reload: false
      action [:enable, :start]
    end

    # The QA root directory
    directory '/var/www/html_qa' do
      owner node['php']['deploy_user']
      group 'webdev'
      mode '0775'
      action :create
    end

    sugarcrm_root_directory = '/var/www/html_qa/sugarcrm'

    git 'SugarCRM' do
      repository 'git@github.com:/theorchard/sugarcrm.git'
      reference 'master'
      checkout_branch 'master'
      enable_checkout false
      destination sugarcrm_root_directory
      user node['php']['deploy_user']
      group 'webdev'
      action :checkout
    end

    # Make sure apache has write permissions
    directory sugarcrm_root_directory do
      mode '0775'
    end

    # Populate healthcheck
    file "#{sugarcrm_root_directory}/healthchk.html" do
      content 'hello'
      owner node['php']['deploy_user']
      group 'webdev'
      mode '644'
      action :create
    end

    cron 'sugarcrm_cron' do
      hour '*'
      minute '*/10'
      user node['php']['deploy_user']
      command "cd #{sugarcrm_root_directory};"\
        '/opt/remi/php73/root/usr/bin/php -f cron.php >/dev/null 2>&1'
    end

    sales_platform_secret_content = data_bag_item(
      'secrets', 'qa_sugarcrm_sales_platform_credentials')
    sales_platform_url = sales_platform_secret_content['sales_platform_url'].chomp
    sales_platform_client_id = sales_platform_secret_content['sales_platform_client_id'].chomp
    sales_platform_client_secret = sales_platform_secret_content['sales_platform_client_secret'].chomp
    setenv_params = Hash[
      'SALESPLATFORM_URL' => sales_platform_url,
      'SALESPLATFORM_CLIENT_ID' => sales_platform_client_id,
      'SALESPLATFORM_CLIENT_SECRET' => sales_platform_client_secret
    ]

    # This by default references a template with a matching name
    apache_conf 'sugarcrm' do
      enable true
    end

    # Ensure the default vhost is disabled
    apache_site 'default' do
      enabled false
    end

    # Explicitly disable the default site if it is active, as a failsafe.
    execute 'a2dissite default' do
      only_if do
        File.symlink?('/etc/httpd/sites-enabled/default.conf')
      end
      notifies :restart, 'service[apache2]'
    end

    # Vhost attributes are contained in roles
    node['webapps'].each do |vhost, vhost_info|
      web_app vhost do
        template 'vhost.conf.erb'
        port vhost_info['port']
        server_admin vhost_info['server_admin']
        server_name vhost_info['server_name']
        if defined?(vhost_info['server_aliases'])
          server_aliases vhost_info['server_aliases']
        end
        docroot vhost_info['docroot']
        if defined?(vhost_info['docroot_rewrites'])
          docroot_rewrites vhost_info['docroot_rewrites']
        end
        if defined?(vhost_info['directory_options'])
          directory_options vhost_info['directory_options']
        end
        allow_override vhost_info['allow_override']
        setenv setenv_params if defined?(vhost_info['setenv'])
        newrelic vhost_info['newrelic'] if defined?(vhost_info['newrelic'])
      end
    end
  end
end
