### vim:ft=zsh:foldmethod=marker
## letssingit.com search backend for lookup
## Copyright: 2009, Frank Terbeck <ft@bewatermyfriend.org>

LOOKUP_guard || return 1
[[ -n ${lookup_describe} ]] &&
    printf '%s' 'search letssingit.com' &&
    return 0

local mode lookup_context
local -a comp_args
local -A opts supported_modes
local -x QUERY

lookup_context="$(LOOKUP_context)"

supported_modes=(
    artist  'search by artist'
    album   'search by album'
    song    'search by song name'
    lyrics  'search contents of lyrics'
)

LOOKUP_guard -fd LOOKUP_help_${backend} ||
function LOOKUP_help_${backend}() {
    LOOKUP_guard || return 1
    printf 'usage: %s [-m mode] <query>\n' ${backend}
    printf '  -m <mode>     specify search mode\n'
    printf '\n Make music related queries via letssingit.com\n'
    printf '\nAvailable modes are::\n'
    for mode in ${(kon)supported_modes} ; do
        printf '%8s   - %s\n' ${mode} ${supported_modes[$mode]}
    done
    printf '\n The default mode is '\''artist'\'', which can be modified via the\n'
    printf ' '\''default-mode'\'' style in this context: %s\n\n' ${lookup_context}
    printf 'Examples:\n'
    printf ' %% zstyle '\'':lookup:*:%s:*'\'' default-mode song\n' ${backend}
    printf ' %% lookup %s Led Zeppelin\n' ${backend}
    printf ' %% lookup %s -m album Machine Head\n' ${backend}
    printf ' %% lookup %s -m song Paint it Black\n' ${backend}
}
LOOKUP_help && return 0

if [[ -n ${lookup_complete} ]] ; then
    LOOKUP_guard -fd __lookup_${backend}_supported_modes ||
    function __lookup_${backend}_supported_modes() {
        local m
        local -a ms

        ms=()
        for m in ${(k)supported_modes}; do
            ms+=("$m:${supported_modes[$m]}")
        done
        _describe -t letssingit_modes 'supported search modes' ms
    }

    comp_args=(
        '-m[set search mode]:supported search modes:__lookup_'${backend}'_supported_modes'
        '*:letssingit.com query:true'
    )

    _arguments -s -w -A '-*' ${comp_args} && return 0
    _message 'letssingit.com query'
    return 0
fi

lu_parseopts_args=( m string )
LOOKUP_parseopts "$@" || return 1
mode=${opts[-m]}

if [[ -z ${mode} ]] ; then
    zstyle -s "${lookup_context}" default-mode mode || mode='artist'
fi

QUERY="${args[*]}"
lookup_communicate[mode]=${mode}
LOOKUP_query_handler || return 1
if [[ -z ${(Mk)supported_modes:#$mode} ]] ; then
    printf 'Unknown search mode: '\''%s'\''.\n\n' ${mode}
    QUERY=''
fi
if [[ -z ${QUERY} ]] ; then
    LOOKUP_help -f
    return 1
fi

LOOKUP_encode -q
LOOKUP_browser "http://search.letssingit.com/cgi-exe/am.cgi?a=search_quick&l=${mode}&s=${QUERY}"
return $?
