
___x_cmd_ccal_fzy(){
    while [ $# -gt 0 ]; do
        case "$1" in
            -h|--help)  ___x_cmd help -m ccal fzy "$@" ; return ;;
            *)          break ;;
        esac
    done

    ___x_cmd_ccal_lunar_prepare  || return $?

    local ___X_CMD_CCAL_FZ_RESULT="${1:-"$___X_CMD_CCAL_FZ_RESULT"}"

    ___x_cmd_ccal_fz___info

    local ___X_CMD_CCAL_FZ_APP_TYPE=y
    local ___X_CMD_CCAL_FZ_APP_CONT=1
    while [ "$___X_CMD_CCAL_FZ_APP_CONT" -eq 1 ]; do
        "___x_cmd_ccal___fz${___X_CMD_CCAL_FZ_APP_TYPE}" || return $?
    done
}

___x_cmd_ccal___fzy(){
    ___x_cmd_ccal_fz___date_ "$___X_CMD_CCAL_FZ_RESULT"

    local pos="$(( ___X_CMD_CCAL_FZ_DATE_Y - 1900 + 1 ))"

    local FZF_DEFAULT_OPTS="
        --bind='ctrl-t:print(|restart|)+accept'
    "

    ___x_cmd_ccal_lunar_prepare_index || return $?

    local x_;     ___x_cmd storerat_ ___x_cmd_ccal___fzy_fz_ || return $?
    case "$x_" in
        *"|restart|"*)
                ___X_CMD_CCAL_FZ_RESULT="$___X_CMD_CCAL_FZ_DATE_TODAY"
                return 0
                ;;
        *"|goback|"*)
                ___x_cmd_ccal_fz___read_date_ "${x_}";
                ___X_CMD_CCAL_FZ_RESULT="${x_}-1-1"
                ___X_CMD_CCAL_FZ_APP_TYPE=y     # In the future, decade, century
                return 0
                ;;

        *"|next-view|"*)
                ___X_CMD_CCAL_FZ_APP_TYPE=m
                return 0
                ;;

        *"|prev-view|"*)
                ___X_CMD_CCAL_FZ_APP_TYPE=d
                return 0
                ;;

        *)
                ___x_cmd_ccal_fz___read_date_ "${x_}"
                ___X_CMD_CCAL_FZ_RESULT="${x_}-1-1"
                ___X_CMD_CCAL_FZ_APP_TYPE=m
                ;;
    esac
}

___x_cmd_ccal___fzy_fz_(){
    {
        ___x_cmd_cmds awk \
            -v "year=$___X_CMD_CCAL_FZ_DATE_TODAY_Y"    \
            -f "$___X_CMD_ROOT_MOD/ccal/lib/awk/lunar.awk"  \
            -f "$___X_CMD_ROOT_MOD/ccal/lib/awk/fzy_ls.awk" \
            < "$___X_CMD_CCAL_LUNAR_INDEX_FOLDER/year.tsv"
    } | {
        FZF_DEFAULT_OPTS="
            $FZF_DEFAULT_OPTS
            --exact
            --ansi
            --reverse
            --height='80%'
            --bind='ctrl-w:toggle-preview-wrap'
            --bind='ctrl-r:change-preview-window(80%|52|hidden)'

            --bind='tab:print(|next-view|)+accept'

            --bind='ctrl-b:print(|goback|)+accept'
            --bind='ctrl-f:accept'
            --bind='right:accept'

            --bind='alt-up:up+up+up+up+up'
            --bind='alt-down:down+down+down+down+down'

            --preview-window='right:52,wrap'
            --bind='load:pos($pos)'
            --preview='___x_cmdexe ccal --fzypreview {1}'
        " ___x_cmd fzf
    }
}

___x_cmd_ccal___fzypreview(){
    local ymd="$1"
    local year="${ymd%%-*}"
    HLDAY="$year-1-1" ___x_cmdexe ccal draw "$year-1-1"
}

