_ee_complete()
{
    local cur prev BASE_LEVEL

    COMPREPLY=()
    cur=${COMP_WORDS[COMP_CWORD]}
    prev=${COMP_WORDS[COMP_CWORD-1]}
    mprev=${COMP_WORDS[COMP_CWORD-2]}


    # SETUP THE BASE LEVEL (everything after "ee")
    if [ $COMP_CWORD -eq 1 ]; then
        COMPREPLY=( $(compgen \
                      -W "stack site debug clean secure import-slow-log log update sync info --version --help --quiet" \
                      -- $cur) )


    # SETUP THE SECOND LEVEL (EVERYTHING AFTER "ee second")
    elif [ $COMP_CWORD -eq 2 ]; then
        case "$prev" in

            # HANDLE EVERYTHING AFTER THE SECOND LEVEL NAMESPACE
            "clean")
                COMPREPLY=( $(compgen \
                              -W "--memcache --opcache --fastcgi --pagespeed --redis --all" \
                              -- $cur) )
                ;;

            # IF YOU HAD ANOTHER CONTROLLER, YOU'D HANDLE THAT HERE
            "debug")
                COMPREPLY=( $(compgen \
                              -W "$(command find /etc/nginx/sites-enabled/ -type l -printf "%P " 2> /dev/null)  --nginx --php --fpm --mysql -i --interactive --all --import-slow-log --import-slow-log-interval= --nginx=off --php=off --fpm=off --mysql=off --all=off  " \
                              -- $cur) )
                ;;

            "stack")
                COMPREPLY=( $(compgen \
                              -W "upgrade install purge reload remove restart start status stop migrate" \
                              -- $cur) )
                ;;

            "site")
                COMPREPLY=( $(compgen \
                              -W "cd create delete disable edit enable info list log show update" \
                              -- $cur) )
                ;;

            "secure")
                COMPREPLY=( $(compgen \
                              -W "--auth --port --ip" \
                              -- $cur) )
                ;;

            "info")
                COMPREPLY=( $(compgen \
                              -W "--mysql --php --nginx" \
                              -- $cur) )
                ;;

            "log")
                COMPREPLY=( $(compgen \
                              -W "show reset gzip mail" \
                              -- $cur) )
                ;;

            # EVERYTHING ELSE
            *)
                ;;
        esac

    # SETUP THE THIRD LEVEL (EVERYTHING AFTER "ee second third")
    elif [ $COMP_CWORD -eq 3 ]; then
        case "$prev" in
            # HANDLE EVERYTHING AFTER THE THIRD LEVEL NAMESPACE
            "install" | "purge" | "remove" )
                COMPREPLY=( $(compgen \
                              -W "--pagespeed --web --admin --mail --nginx --php --mysql --postfix --wpcli --phpmyadmin --adminer --utils --all --mailscanner --hhvm --redis --phpredisadmin" \
                              -- $cur) )
                ;;
            "upgrade" )
                COMPREPLY=( $(compgen \
                              -W "--web --mail --nginx --php --mysql --postfix --all --hhvm --php56 --no-prompt --wpcli" \
                              -- $cur) )
                ;;
            "start" | "stop" | "reload" | "restart" | "status")
                COMPREPLY=( $(compgen \
                              -W "--nginx --php --mysql --postfix --memcache --dovecot --redis" \
                              -- $cur) )
                ;;
            "migrate")
                COMPREPLY=( $(compgen \
                              -W "--mariadb" \
                              -- $cur) )
                ;;
            "list")
                COMPREPLY=( $(compgen \
                              -W "--enabled --disabled" \
                              -- $cur) )
                ;;

            "edit" | "enable" | "info" | "log" | "show" | "cd" | "delete")
                if [ ${COMP_WORDS[1]} == "log" ]; then
                    COMPREPLY=( $(compgen \
                                  -W "$(find /etc/nginx/sites-available/ -type f -printf "%P " 2> /dev/null) --nginx --php --fpm --mysql --access" \
                                  -- $cur) )
                else
                    COMPREPLY=( $(compgen \
                                -W "$(find /etc/nginx/sites-available/ -type f -printf "%P " 2> /dev/null)" \
                                -- $cur) )
                fi
                ;;
            "update")
                COMPREPLY=( $(compgen \
                            -W "$(find /etc/nginx/sites-available/ -type f -printf "%P " 2> /dev/null) --all" \
                            -- $cur) )
                ;;
            "gzip")
                COMPREPLY=( $(compgen \
                              -W "$(find /etc/nginx/sites-available/ -type f -printf "%P " 2> /dev/null) --nginx --php --fpm --mysql  --access" \
                              -- $cur) )
                ;;

            "mail")
                COMPREPLY=( $(compgen \
                              -W "$(find /etc/nginx/sites-available/ -type f -printf "%P " 2> /dev/null) --nginx --php --fpm --mysql --access --to=" \
                              -- $cur) )
                ;;

            "reset")
                COMPREPLY=( $(compgen \
                              -W "$(find /etc/nginx/sites-available/ -type f -printf "%P " 2> /dev/null) --nginx --php --fpm --mysql --wp --access --slow-log-db" \
                              -- $cur) )
                ;;

            "disable")
                COMPREPLY=( $(compgen \
                              -W "$(command find /etc/nginx/sites-enabled/ -type l -printf "%P " 2> /dev/null)" \
                              -- $cur) )
                ;;

            *)
                ;;
        esac

        if [ ${COMP_WORDS[1]} == "debug" ] && ([ "$prev" != "--start" ] && [ "$prev" != "--nginx" ] && [ "$prev" != "--php" ] && [ "$prev" != "--fpm" ] && [ "$prev" != "--mysql" ] && [ "$prev" != "-i" ] && [ "$prev" != "--interactive" ] && [ "$prev" != "--import-slow-log" ] && [ "$prev" != "--stop" ]); then
            retlist="--all --wp --rewrite -i --all=off --wp=off --rewrite=off"
            ret="${retlist[@]/$prev}"
            COMPREPLY=( $(compgen \
                          -W "$(echo $ret)" \
                          -- $cur) )
        fi

        #if [ ${COMP_WORDS[1]} == "log" ] && ([ "$prev" != "--access" ] || [ "$prev" != "--nginx" ] || [ "$prev" != "--php" ] || [ "$prev" != "--fpm" ] || [ "$prev" != "--mysql" ] || [ "$prev" != "-i" ] || ["$prev" != "--interactive" ] || ["$prev" != "--stop" ]); then
        #        retlist="--all --wp --rewrite -i --all=off --wp=off --rewrite=off"
        #        ret="${retlist[@]/$prev}"
        #        COMPREPLY=( $(compgen \
        #                      -W "$(echo $ret)" \
        #                      -- $cur) )
        #fi


    elif [ $COMP_CWORD -eq 4 ]; then
        case "$mprev" in
            # HANDLE EVERYTHING AFTER THE THIRD LEVEL NAMESPACE

            "create")
                COMPREPLY=( $(compgen \
                                    -W "--user --pass --email --html --php --mysql --wp  --wpsubdir --wpsubdomain --w3tc --wpfc --wpsc --hhvm --proxy= --pagespeed --wpredis" \
                                 -- $cur) )
                ;;

            "update")
                COMPREPLY=( $(compgen \
                                    -W "--password --php --mysql --wp  --wpsubdir --wpsubdomain --w3tc --wpfc --wpsc --hhvm --hhvm=off --pagespeed --pagespeed=off --wpredis" \
                                 -- $cur) )
                ;;
            "delete")
                COMPREPLY=( $(compgen \
                                    -W "--db --files --all --no-prompt --force -f" \
                                 -- $cur) )
                ;;
            "show")
                COMPREPLY=( $(compgen \
                              -W "--wp --nginx --php --fpm --mysql  --access" \
                              -- $cur) )
                ;;

            "gzip")
                COMPREPLY=( $(compgen \
                              -W "--wp --nginx --php --fpm --mysql  --access" \
                              -- $cur) )
                ;;

            "mail")
                COMPREPLY=( $(compgen \
                              -W "--wp --nginx --php --fpm --mysql --access --to=" \
                              -- $cur) )
                ;;

            "reset")
                COMPREPLY=( $(compgen \
                              -W "--wp --nginx --php --fpm --mysql --wp --access --slow-log-db" \
                              -- $cur) )
                ;;
            edit)
                COMPREPLY=( $(compgen \
                              -W "--pagespeed" \
                              -- $cur) )
                ;;
            *)
                ;;
        esac

    fi

    case "$prev" in
        "--wp")
            if [ ${COMP_WORDS[1]} != "debug" ]; then
                if [ ${COMP_WORDS[2]} == "create" ]; then
                    retlist="--wp --wpsc --w3tc --wpfc --pagespeed --hhvm --user --email --pass --wpredis"
                elif [ ${COMP_WORDS[2]} == "update" ]; then
                    retlist="--wp --w3tc --wpfc --wpsc --pagespeed --hhvm --pagespeed=off --hhvm=off --wpredis"
                else
                    retlist=""
                fi
            else
                retlist="--wp --wp=off --rewrite --rewrite=off -i --interactive"
            fi

            ret="${retlist[@]/$prev}"
                COMPREPLY=( $(compgen \
                              -W "$(echo $ret)" \
                              -- $cur) )
            ;;

        "--wpsubdir" | "--wpsubdomain")
            if [ ${COMP_WORDS[1]} != "debug" ]; then
                if [ ${COMP_WORDS[2]} == "create" ]; then
                    retlist="--wpsc --w3tc --wpfc --pagespeed --hhvm --user --email --pass --wpredis"
                elif [ ${COMP_WORDS[2]} == "update" ]; then
                    retlist="--w3tc --wpfc --wpsc --pagespeed --hhvm --pagespeed=off --hhvm=off --wpredis"
                else
                    retlist=""
                fi
            else
                retlist="--wp=off --rewrite --rewrite=off -i --interactive"
            fi

            ret="${retlist[@]/$prev}"
                COMPREPLY=( $(compgen \
                              -W "$(echo $ret)" \
                              -- $cur) )
            ;;

        "--pagespeed" | "--hhvm" | "--wpredis" | "--w3tc" | "--wpfc" | "--wpsc" | "--wpsubdir" | "--wpsubdomain" | "--user" | "--pass" | "--email" | "--wp")
            if [ ${COMP_WORDS[2]} == "create" ]; then
                retlist="--user --pass --email --wp  --wpsubdir --wpsubdomain --w3tc --wpfc --wpsc --hhvm --pagespeed --experimenal  --wpredis"
            else
                retlist=""
            fi

            ret="${retlist[@]/$prev}"
                COMPREPLY=( $(compgen \
                              -W "$(echo $ret)" \
                              -- $cur) )
            ;;

        "--pagespeed" | "--hhvm" | "--wpredis" | "--w3tc" | "--wpfc")
            if [ ${COMP_WORDS[2]} == "update" ]; then
                retlist="--password --php --mysql --wp  --wpsubdir --wpsubdomain --w3tc --wpfc --wpsc --hhvm --hhvm=off --pagespeed --pagespeed=off --experimenal --wpredis"
            else
                retlist=""
            fi

            ret="${retlist[@]/$prev}"
                COMPREPLY=( $(compgen \
                              -W "$(echo $ret)" \
                              -- $cur) )
            ;;

        "--web" | "--admin" | "--mail" | "--nginx" | "--php" | "--mysql" | "--postfix" | "--wpcli" | "--phpmyadmin" | "--adminer" | "--utils" | "--memcache" | "--dovecot" | "--redis | --phpredisadmin")
            if [[ ${COMP_WORDS[2]} == "install" || ${COMP_WORDS[2]} == "purge" || ${COMP_WORDS[2]} == "remove" ]]; then
                retlist="--web --admin --mail --nginx --php --mysql --postfix --wpcli --phpmyadmin --adminer --utils --memcache --dovecot --redis --phpredisadmin"
            elif [[ ${COMP_WORDS[2]} == "start" || ${COMP_WORDS[2]} == "reload" || ${COMP_WORDS[2]} == "restart" || ${COMP_WORDS[2]} == "stop" ]]; then
                    retlist="--nginx --php --mysql --postfix --memcache --dovecot --redis"
            elif [[ ${COMP_WORDS[1]} == "debug" ]]; then
                    retlist="--start --nginx --php --fpm --mysql -i --interactive  -stop --import-slow-log --import-slow-log-interval= -"
                    if [[ $prev == '--mysql' ]]; then
                        retlist="--start --nginx --php --fpm --mysql -i --interactive --stop --import-slow-log"
                    fi
            elif [[ ${COMP_WORDS[1]} == "log" ]]; then
                    if [ ${COMP_WORDS[2]} == "show" ]; then
                        retlist="--access --nginx --php --mysql --fpm --wp"

                    elif [ ${COMP_WORDS[2]} == "reset" ]; then
                        retlist="--access --nginx --php --mysql --fpm --wp --slow-log-db"

                    elif [ ${COMP_WORDS[2]} == "mail" ]; then
                        retlist="--access --nginx --php --mysql --fpm --wp --to="

                    fi
            fi
            ret="${retlist[@]/$prev}"
            COMPREPLY=( $(compgen \
                        -W "$(echo $ret)" \
                        -- $cur) )
            ;;

        "--db" | "--files" | "--force")
            retlist="--db --files --all --force"
            ret="${retlist[@]/$prev}"
            COMPREPLY=( $(compgen \
                          -W "$(echo $ret)" \
                          -- $cur) )
            ;;

        "--all")
          if [ ${COMP_WORDS[1]} == "clean" ]; then
                  retlist="--memcache --opcache --fastcgi --redis"
          elif [ ${COMP_WORDS[2]} == "delete" ]; then
              retlist="--db --files --force"
          elif [ ${COMP_WORDS[2]} == "update" ]; then
            retlist="--password --php --mysql --wp  --wpsubdir --wpsubdomain --w3tc --wpfc --wpsc --hhvm --hhvm=off --pagespeed --pagespeed=off --wpredis"
          else
            retlist=""
          fi
          ret="${retlist[@]/$prev}"
              COMPREPLY=( $(compgen \
                            -W "$(echo $ret)" \
                            -- $cur) )
          ;;

        "--memcache" | "--opcache" | "--fastcgi" | "--all" | "--redis" | "--pagespeed")
            retlist="--memcache --opcache --fastcgi --pagespeed --redis --all"
            ret="${retlist[@]/$prev}"
            COMPREPLY=( $(compgen \
                          -W "$(echo $ret)" \
                          -- $cur) )
            ;;
        "--auth" | "--port" | "--ip")
            retlist="--auth --port --ip"
            ret="${retlist[@]/$prev}"
            COMPREPLY=( $(compgen \
                          -W "$(echo $ret)" \
                          -- $cur) )
            ;;
        "--access" | "--fpm" | "--wp" | "--slow-log-db")
            if [[ ${COMP_WORDS[1]} == "log" ]]; then
                    if [ ${COMP_WORDS[2]} == "show" ]; then
                        retlist="--access --nginx --php --mysql --fpm --wp"

                    elif [ ${COMP_WORDS[2]} == "reset" ]; then
                        retlist="--access --nginx --php --mysql --fpm --wp --slow-log-db"


                    elif [ ${COMP_WORDS[2]} == "mail" ]; then
                        retlist="--access --nginx --php --mysql --fpm --wp --to="

                    fi
            fi
            ret="${retlist[@]/$prev}"
            COMPREPLY=( $(compgen \
                          -W "$(echo $ret)" \
                          -- $cur) )
            ;;
        *)
            ;;
        esac
        case "$mprev" in
            "--user" | "--email" | "--pass")
                if [ ${COMP_WORDS[2]} == "create" ]; then
                    retlist="--user --pass --email --html --php --mysql --wp  --wpsubdir --wpsubdomain --w3tc --wpfc --wpsc --hhvm --pagespeed --wpredis"
                fi
                ret="${retlist[@]/$prev}"
                COMPREPLY=( $(compgen \
                              -W "$(echo $ret)" \
                              -- $cur) )
                ;;
        esac

    return 0

} &&
complete -F _ee_complete ee