<?xml version="1.0" encoding="UTF-8"?>
<project name="Varbase" default="env">

  <property name="drush" value="${project.basedir}/bin/drush" />
  <property name="composer" value="/usr/local/bin/composer" />
  <property name="npm" value="/usr/local/bin/npm" />
  <property name="phpqa" value="${project.basedir}/bin/phpqa"/>
  <property name="rsync" value="/usr/bin/rsync" />
  <property name="db.type" value="mysql" />
  <property name="db.host" value="localhost" />
  <property name="db.user" value="root" />
  <property name="db.password" value="" />
  <property name="db.database" value="test_Varbase10x01xxc" />
  <property name="db.url" value="${db.type}://${db.user}:${db.password}@${db.host}/${db.database}" />
  <property name="docroot" value="docroot" />
  <property name="profile" value="${docroot}/profiles/contrib/varbase" />
  <property name="site" value="${docroot}/sites/default" />
  <property name="version" value="HEAD" />

  <!-- Finds Composer, NPM, and rsync. -->
  <target name="env">
    <if>
      <not>
        <available file="${drush}" property="drush.exists" />
      </not>
      <then>
        <exec command="which drush" outputProperty="drush" />
      </then>
    </if>
    <exec command="which composer" outputProperty="composer" />
    <exec command="which npm" outputProperty="npm" />
    <exec command="which rsync" outputProperty="rsync" />

    <echo message="Found Drush: ${drush}" />
    <echo message="Found Composer: ${composer}" />
    <echo message="Found phpqa: ${phpqa}" />
    <echo message="Found NPM: ${npm}" />
    <echo message="Found rsync: ${rsync}" />
  </target>

  <!-- Syncs the Varbase profile into the Drupal code base. -->
  <target name="push" depends="env">
    <!-- Create the destination if it doesn't exist. -->
    <mkdir dir="${profile}" />

    <!--
    bower.json may have changed, so reinstall front-end dependencies using
    the version of Bower installed locally in node_modules. The
    install-libraries script lives in package.json.
    -->
    <exec command="${npm} run install-libraries" passthru="true" />

    <!-- rsync the profile, excluding developer flotsam. -->
    <filesync destinationDir="${profile}" rsyncPath="${rsync}" sourceDir="." verbose="false" exclude=".idea,bin,build.xml,.git,.gitignore,${docroot},karma.conf.js,*.make,node_modules,vendor" />

    <!-- JS libraries and contrib modules were copied over by the file sync. -->
    <delete dir="libraries" failonerror="true" quiet="true" />
    <delete dir="modules/contrib" failonerror="true" quiet="true" />
  </target>

  <target name="pull" depends="env">
    <filesync destinationDir="." rsyncPath="${rsync}" sourceDir="${profile}/" verbose="false" exclude="libraries,modules/contrib,behat.local.yml" />
  </target>

  <!-- Prepares the behat tests environment. -->
  <target name="code-quality-check" depends="env">
    <exec executable="${phpqa}" passthru="true">
      <arg value="--analyzedDirs=./"/>
      <arg value="--buildDir=./tests/code-quality"/>
    </exec>
  </target>

  <!-- Prepares the docroot for installation via the UI. -->
  <target name="preinstall" depends="uninstall">
    <if>
      <not>
        <isset property="www.user" />
      </not>
      <then>
        <exec command="whoami" outputProperty="www.user" />
      </then>
    </if>

    <copy file="${site}/default.settings.php" tofile="${site}/settings.php" />
    <chmod file="${site}/settings.php" mode="0775" />
    <mkdir dir="${site}/files" mode="0775" />

    <if>
      <and>
        <isset property="www.user" />
        <isset property="www.group" />
      </and>
      <then>
        <chown file="${site}/settings.php" user="${www.user}" group="${www.group}" />
        <chown file="${site}/files" user="${www.user}" group="${www.group}" />
      </then>
    </if>
  </target>

  <!-- Install with drush site install -->
  <target name="install-with-drush-site-install" depends="env">
    <!-- Use passthru() when executing drush site-install so that we'll know if errors occur. -->
    <exec command="${drush} site-install varbase --yes --site-name='Test Varbase10x01xxc' --account-name=webmaster --account-pass=dD.123123ddd --account-mail=webmaster@vardot.com --db-url=${db.url} varbase_multilingual_configuration.enable_multilingual=true varbase_extra_components.vmi=true varbase_extra_components.varbase_heroslider=true varbase_extra_components.varbase_carousels=true varbase_extra_components.varbase_search=true varbase_extra_components.varbase_blog=true varbase_extra_components.varbase_auth=true varbase_development_tools.varbase_development=true" dir="${docroot}" passthru="true" />
    <exec command="${drush} en vbp_text_and_image --yes" dir="${docroot}" />
    <exec command="${drush} en varbase_media_instagram --yes" dir="${docroot}" />
    <exec command="${drush} en varbase_media_twitter --yes" dir="${docroot}" />
    <exec command="${drush} en social_auth_facebook --yes" dir="${docroot}" />
    <exec command="${drush} en social_auth_linkedin --yes" dir="${docroot}" />
    <exec command="${drush} config-set system.performance css.preprocess 0 --yes --format=boolean" dir="${docroot}" />
    <exec command="${drush} config-set system.performance js.preprocess 0 --yes --format=boolean" dir="${docroot}" />
    <exec command="${drush} config-set system.logging error_level all --yes" dir="${docroot}" />
  </target>

  <!-- Builds the Varbase code base from HEAD, overwriting docroot, and
  executes all database updates. -->
  <target name="update" depends="env">
    <phingcall target="build" />
    <exec command="${drush} cache-rebuild" />
    <exec command="${drush} updatedb --yes" dir="${docroot}" passthru="true" />
    <!-- TODO: Execute manual update steps as needed. -->
  </target>

  <!-- Prepares Varbase for the drupal.org packaging system. -->
  <target name="package">
    <!-- Create a symlink to the installed libraries so that the packaging script can scan 'em. -->
    <symlink target="${profile}/libraries" link="libraries" />
    <exec command="./package" />
    <delete file="libraries" />
  </target>

  <!-- Builds a Varbase code base from legacy Drush make files. -->
  <target name="build-legacy" depends="env">
    <if>
      <available file="${docroot}" property="docroot.exists" />
      <then>
        <phingcall target="package" />
        <delete dir="${docroot}" />
      </then>
    </if>

    <exec command="${drush} make drupal-org-core.make ${docroot} --yes" />
    <exec command="${drush} make drupal-org.make ${docroot} --no-core --yes" />
    <exec command="${composer} require drush/drush" dir="${docroot}" />

    <phingcall target="push" />
  </target>

  <!-- Destroys the Drupal installation, but leaves the code base intact. -->
  <target name="uninstall">
    <if>
      <available file="${site}" property="site.exists" />
      <then>
        <chmod file="${site}" mode="0755" />
        <delete failonerror="true" includeemptydirs="true">
          <fileset dir="${site}">
            <include name="settings.php" />
            <include name="files/**" />
          </fileset>
        </delete>
      </then>
    </if>
    <!-- TODO: Delete the database and recreate it? -->
  </target>

  <!-- Destroys the installed code base. -->
  <target name="destroy" depends="uninstall">
    <delete failonerror="true" includeemptydirs="true">
      <fileset dir="." defaultexcludes="false">
        <include name="bin/**" />
        <include name="${docroot}/**" />
        <include name="node_modules/**" />
        <include name="vendor/**" />
      </fileset>
    </delete>
  </target>

</project>
