#!/bin/sh
# elvis: duckduckgo	-- Securely search the web using duckduckgo (duckduckgo.com)
# coder@kyleisom.net 20110105
# relevant: https://duckduckgo.com/params.html
# similar to duckduckgo elvi, adds more options and defaults to SSL.
. surfraw || exit 1

w3_config_hook () {
    def     SURFRAW_duckduckgo_results             "$SURFRAW_results"
    def     SURFRAW_duckduckgo_base_url            "duckduckgo.com"
    def     SURFRAW_duckduckgo_search              search
    def     SURFRAW_duckduckgo_params              "&kg=g"
    defyn   SURFRAW_duckduckgo_https_arg           0
    defyn   SURFRAW_duckduckgo_safe_arg            0
    defyn   SURFRAW_duckduckgo_redirect_arg        0
    defyn   SURFRAW_duckduckgo_use_javascript      0
    defyn   SURFRAW_duckduckgo_got_a_ducky_feeling 0
}

w3_usage_hook () {
    cat <<EOF
Usage: $w3_argv0 [options] [search words]...
Description:
  Surfraw search the web using DuckDuckGo (duckduckgo.com)
Local options:
    -d,-ducky,-l,-lucky         use in case of overwhelming feeling of duckiness
    -j,-javascript              use javascript
    -safe                       enable safe search
    -r,-redirect                use redirection
    -s,-insecure                disable SSL search
EOF
    w3_global_usage
}

w3_parse_option_hook () {
    opt="$1"
    optarg="$2"
    case "$opt" in
    -d*|-l|-lu*)        setoptyn    SURFRAW_duckduckgo_got_a_ducky_feeling 1 ;;
    -j|-javascript*)    setoptyn    SURFRAW_duckduckgo_use_javascript      1 ;;
    -safe*)				setoptyn    SURFRAW_duckduckgo_safe_arg            1 ;;
    -r|-redirect*)      setoptyn    SURFRAW_duckduckgo_redirect_arg        1 ;;
    -s|-sec*)           setoptyn    SURFRAW_duckduckgo_https_arg           1 ;;
    *) return 1 ;;
    esac
    return 0
}

w3_config
w3_parse_args "$@"
# w3_args now contains a list of arguments

if [ "${SURFRAW_duckduckgo_https_arg}" = 0 ] ; then
    SURFRAW_duckduckgo_base_url="https://${SURFRAW_duckduckgo_base_url}"
else
    SURFRAW_duckduckgo_base_url="http://${SURFRAW_duckduckgo_base_url}"
fi

# need to send the user to the non-javascript version if using a non-graphical
# browser
if [ "$SURFRAW_duckduckgo_use_javascript" = 0 ]; then
    SURFRAW_duckduckgo_base_url="${SURFRAW_duckduckgo_base_url}/lite"
fi

if [ "$SURFRAW_duckduckgo_safe_arg" = 1 ]; then
    SURFRAW_duckduckgo_params="${SURFRAW_duckduckgo_params}&kp=1"
fi

if [ "$SURFRAW_duckduckgo_redirect_arg" = 1 ] ; then
    SURFRAW_duckduckgo_params="${SURFRAW_duckduckgo_params}&kd=1"
fi

if [ "$SURFRAW_graphical" != "yes" ] ; then
    SURFRAW_duckduckgo_params="${SURFRAW_duckduckgo_params}&kf=-1&kz=-1&kq=-1&kv=-1"
fi

escaped_args=`w3_url_of_arg $w3_args`
if [ "$SURFRAW_duckduckgo_got_a_ducky_feeling" = 1 ]; then
    escaped_args="! ${escaped_args}"
fi

w3_browse_url "${SURFRAW_duckduckgo_base_url}/?q=${escaped_args}${SURFRAW_duckduckgo_params}"
