#!/usr/bin/env bash

if [ -z "$1" ]; then
  echo "Where config file?"
  exit 1
fi

cfg=$1

# Set host_os:
#   windows, linux, unknown
# host_distro:
#   cygwin, debian, unknown
check_platform() {
  case `uname -s` in
    CYGWIN_NT-*)
      host_os=windows
      host_distro=cygwin
      ;;
    Linux)
      host_os=linux
      if [ -e /etc/debian_version ]; then
        host_distro=debian
      else
        host_distro=unknown
      fi
      ;;
    Darwin)
      host_os=darwin
      ;;
    *)
      host_os=unknown
      ;;
  esac
}

print_header() {
  echo
  echo ';; ================================================================'
  echo ";; ${FUNCNAME[1]}."
  echo
}

check_ispell() {
  command -v ispell >/dev/null && return 0 || return 1
}

check_aspell() {
  command -v aspell >/dev/null && return 0 || return 1
}

print_ispell() {
  echo '(setq-default ispell-program-name "ispell")'
  case $host_distro in
    debian)
      echo '(setq-default ispell-local-dictionary "british")'
      ;;
    unknown)
      echo '(setq-default ispell-local-dictionary "default")'
      ;;
  esac
}

print_aspell() {
  echo '(setq-default ispell-program-name "aspell")'
  echo '(setq-default ispell-local-dictionary "en")'
}

print_speller() {
  print_header
  check_ispell
  ispell_present=$?
  check_aspell
  aspell_present=$?
  case $host_os in
    windows)
      case $host_distro in
        cygwin)
          if [ $aspell_present = 0 ]; then
            print_aspell
          elif [ $ispell_present = 0 ]; then
            print_ispell
          fi
          ;;
      esac
      ;;
    linux)
      case $host_distro in
        debian)
          if [ $ispell_present = 0 ]; then
            print_ispell
          elif [ $aspell_present = 0 ]; then
            print_aspell
          fi
          ;;
      esac
      ;;
    darwin)
      print_aspell
      ;;
    *)
      :
      ;;
  esac
}

print_man() {
  print_header
  if man -a man >/dev/null 2>&1; then
    echo '(setq Man-switches "-a")'
  else
    echo '(setq Man-switches "")'
  fi
}

# Remove old auto-generated config and fill it by standard header.
echo ";; -*- mode: emacs-lisp; coding: utf-8; fill-column: 78 -*-
;;
;; For load order see README.
" >$cfg

check_platform
print_speller >>$cfg
print_man >>$cfg

