<?php

/**
 * Generate configuration files
 */
class CRM_Core_CodeGen_Config extends CRM_Core_CodeGen_BaseTask {
  public function run() {
    $this->generateTemplateVersion();

    $this->setupCms();
  }

  public function generateTemplateVersion() {
    file_put_contents($this->config->tplCodePath . "/CRM/common/version.tpl", $this->config->db_version);
  }

  public function setupCms() {
    if (!in_array($this->config->cms, array(
      'backdrop',
      'drupal',
      'drupal8',
      'joomla',
      'wordpress',
    ))) {
      echo "Config file for '{$this->config->cms}' not known.";
      exit();
    }
    elseif ($this->config->cms !== 'joomla') {
      $configTemplate = $this->findConfigTemplate($this->config->cms);
      if ($configTemplate) {
        echo "Generating civicrm.config.php\n";
        copy($configTemplate, '../civicrm.config.php');
      }
      else {
        throw new Exception("Failed to locate template for civicrm.config.php");
      }
    }

    echo "Generating civicrm-version file\n";
    $template = new CRM_Core_CodeGen_Util_Template('php');
    $template->assign('db_version', $this->config->db_version);
    $template->assign('cms', ucwords($this->config->cms));
    $template->run('civicrm_version.tpl', $this->config->phpCodePath . "civicrm-version.php");
  }

  /**
   * @param string $cms
   *   "drupal"|"wordpress".
   * @return null|string
   *   path to config template
   */
  public function findConfigTemplate($cms) {
    $candidates = array();
    switch ($cms) {
      case 'backdrop':
        // FIXME!!!!
        $candidates[] = "../backdrop/civicrm.config.php.backdrop";
        $candidates[] = "../../backdrop/civicrm.config.php.backdrop";
        $candidates[] = "../drupal/civicrm.config.php.backdrop";
        $candidates[] = "../../drupal/civicrm.config.php.backdrop";
        break;

      case 'drupal':
        $candidates[] = "../drupal/civicrm.config.php.drupal";
        $candidates[] = "../../drupal/civicrm.config.php.drupal";
        break;

      case 'drupal8':
        $candidates[] = "../../modules/civicrm/civicrm.config.php.drupal";
        $candidates[] = "../../../modules/civicrm/civicrm.config.php.drupal";
        break;

      case 'wordpress':
        $candidates[] = "../../civicrm.config.php.wordpress";
        $candidates[] = "../WordPress/civicrm.config.php.wordpress";
        $candidates[] = "../drupal/civicrm.config.php.drupal";
        break;
    }
    foreach ($candidates as $candidate) {
      if (file_exists($candidate)) {
        return $candidate;
        break;
      }
    }
    return NULL;
  }

}
