{pkgs, config}:

assert config.services.openfire.usePostgreSQL -> config.services.postgresql.enable;
let
  startDependency = if config.services.openfire.usePostgreSQL then 
    "postgresql"
  else
    if config.services.gw6c.enable then 
      "gw6c" 
    else 
      "network-interfaces";
in
with pkgs;
{
  name = "openfire";
  job = ''
    description "OpenFire XMPP server"

    start on ${startDependency}/started
    stop on shutdown

    script 
      export PATH=${jre}/bin:${openfire}/bin:${coreutils}/bin:${which}/bin:${gnugrep}/bin:${gawk}/bin:${gnused}/bin
      export HOME=/tmp
      mkdir /var/log/openfire || true 
      mkdir /etc/openfire || true 
      for i in ${openfire}/conf.inst/*; do
          if ! test -f /etc/openfire/$(basename $i); then
	      cp $i /etc/openfire/
	  fi
      done
      openfire start
    end script
  '';
}