#!/bin/bash -e

source $OPENSHIFT_CARTRIDGE_SDK_BASH

HTTPD_CFG_FILE=$OPENSHIFT_PHP_DIR/configuration/etc/conf/httpd_nolog.conf
HTTPD_CFG_DIR=$OPENSHIFT_PHP_DIR/configuration/etc/conf.d
HTTPD_PASSENV_FILE=$HTTPD_CFG_DIR/passenv.conf
HTTPD_PID_FILE=$OPENSHIFT_PHP_DIR/run/httpd.pid

# construct the configuration directives for httpd
HTTPD_CMD_CONF="-f $HTTPD_CFG_FILE"
for dir in $HTTPD_CFG_DIR /etc/openshift/cart.conf.d/httpd{,/php} ; do
    [ -d $dir ] && HTTPD_CMD_CONF="$HTTPD_CMD_CONF -C 'Include $dir/*.conf'"
done

function apache() {
    if [ "$1" != "stop" ]; then
      write_httpd_passenv $HTTPD_PASSENV_FILE
      oo-erb ${OPENSHIFT_PHP_DIR}conf/performance.conf.erb.hidden > $HTTPD_CFG_DIR/performance.conf
    fi
    ensure_valid_httpd_process "$HTTPD_PID_FILE" "$HTTPD_CFG_FILE"
    eval "/usr/sbin/httpd $HTTPD_CMD_CONF -k $1"
    ret=$?
    [ "$ret" == "0" -a "$1" == "start" ] && wait_for_pid_file $HTTPD_PID_FILE
    return $ret

}

function restart() {
    write_httpd_passenv $HTTPD_PASSENV_FILE
    oo-erb ${OPENSHIFT_PHP_DIR}conf/performance.conf.erb.hidden > $HTTPD_CFG_DIR/performance.conf
    ensure_valid_httpd_process "$HTTPD_PID_FILE" "$HTTPD_CFG_FILE"
    ensure_httpd_restart_succeed "$HTTPD_PID_FILE" "$HTTPD_CFG_FILE"
    eval "/usr/sbin/httpd $HTTPD_CMD_CONF -k restart"
    return $?
}

function stop() {
    ensure_valid_httpd_process "$HTTPD_PID_FILE" "$HTTPD_CFG_FILE"
    if [ -f "$HTTPD_PID_FILE" ]; then
      # If we still have a PID file, then ensure_valid_httpd_process's call to
      # killall_httpds didn't happen.
      httpd_pid=`cat "$HTTPD_PID_FILE" 2> /dev/null`
      eval "/usr/sbin/httpd $HTTPD_CMD_CONF -k stop"
      wait_for_stop $httpd_pid
    fi
}

function configtest() {
    client_message "Testing Apache *.conf files"
    eval "/usr/sbin/httpd $HTTPD_CMD_CONF -t"
    return $?
}

function status() {
   if output=$(curl http://$OPENSHIFT_PHP_IP:$OPENSHIFT_PHP_PORT/server-status?auto 2>&1 )
   then
      client_result "Application is running"
      client_result $output
      return 0
   else
      client_result "Application is either stopped or inaccessible"
      # FIXME: We should return 1 once we can handle non-zero return statuses
      #        (This should be possible after we remove the v1 logic completely)
      return 0
   fi
}

function tidy() {
    client_message "Emptying log dir: $OPENSHIFT_PHP_LOG_DIR"
    shopt -s dotglob
    rm -rf $OPENSHIFT_PHP_LOG_DIR/*
    return 0
}

function build() {
    echo "Building PHP cartridge"
    if force_clean_build_enabled_for_latest_deployment; then
      echo "force_clean_build enabled - recreating pear libs" 1>&2
      mkdir -p "${OPENSHIFT_PHP_DIR}"/phplib/pear/{docs,ext,php,cache,cfg,data,download,temp,tests,www}
    fi

    if [ -f ${OPENSHIFT_REPO_DIR}deplist.txt ]
    then
        for f in $(cat ${OPENSHIFT_REPO_DIR}deplist.txt)
        do
            echo "Checking pear: $f"
            echo
            if pear list "$f" > /dev/null
            then
                pear upgrade "$f"
            elif ! ( php -c "${OPENSHIFT_PHP_DIR}"/conf -m | grep -i -q \^`basename "$f"`\$ )
            then
                pear install --alldeps "$f"
            else
                echo "Extension already installed in the system: $f"
            fi
            # Remove gear-specific absolute paths from the generated PEAR files
            find ${OPENSHIFT_PHP_DIR}phplib/pear/pear/ -type f ! -name '.*' -exec sed -i "s|${OPENSHIFT_HOMEDIR}|~/|g" {} \;
        done
    fi
    return 0
}

case "$1" in
  start)           echo "Starting PHP cartridge";   apache start ;;
  stop)            echo "Stopping PHP cartridge";   stop ;;
  restart)         echo "Restarting PHP cartridge"; restart ;;
  reload|graceful) echo "Reloading PHP cartridge";  apache graceful ;;
  status)          status ;;
  configtest)      configtest ;;
  tidy)            tidy ;;
  build)           build ;;
  deploy)          exit 0 ;; # Nothing to deploy on template PHP cartridge
  *)               exit 0
esac

exit $?
