#!/bin/sh
#author:Wos
#hifi music terminal
#resource from https://hifini.com/
WORK_DIR=$(dirname $0)
HIFIJS=${WORK_DIR}/hifi.js
HTMP="/tmp/hifi.html"
TTMP="/tmp/hifi_title.txt"
LTMP="/tmp/hifi_link.txt"
DOMAIN="https://www.hifini.com/search-"
KW=$@
CK=""
PG=1
_KW=$(node -e 'require("'${HIFIJS}'").urlencode("'${KW}'")')
function logo()
{
    echo -e "\033[96;40m"
    base64 -d <<<"H4sIAAAAAAAAA5WOsRHAMAgDe6ZQm4ptUnHHIgwfSTgDGOMzWG+ZbpxoxR5uvdWsoB2FWji5GpW6
HmB2kRo7uAoIzzIsveRRpsnNpv6RGKD0gplHJ/1Y0ixL4/+MNO2SCdumaDX7cjzDyFpV4CbiA1rSlIMUAQAA"|gunzip
    echo -e "     Resource Site:"${DOMAIN%/*}
    echo -e "\033[0m"
}

function usage(){
   logo
   echo  "usage:`basename $0` [keyword]"
   echo ""
   exit -1
}

if [ $# == 0 ]; then
   usage
elif [ $# == 1 ] && [ $1 == "-h" ];then
   usage
fi

function getlink(){
LINK=${DOMAIN}${_KW}"-1-"${PG}".htm"
while :;
do
if [[ "${CK}" == "" ]]; then
    CK="Cookie:$(curl -s "${LINK}" --head|awk -Fset-cookie: '{print $2}'|sed '/^$/d')"
fi
curl -H "${CK}" -s ${LINK} > ${HTMP}
cat ${HTMP} |grep "<a href=\"thread"|grep "FLAC/MP3-320K"|grep -v -E "Hi-Res|专辑|合集|全部"|sed  -e s/\<em\>//g -e s/\<\\/em\>//g|awk -F\> '{print $2}'|awk -F\< '{print $1}' > ${TTMP}
cat ${HTMP} |grep "<a href=\"thread"|grep "FLAC/MP3-320K"|grep -v -E "Hi-Res|专辑|合集|全部"|sed  -e s/\<em\>//g -e s/\<\\/em\>//g|awk -F\" '{print $2}' > ${LTMP}
if [ -s "${TTMP}" ]; then
    break
fi
done
}

getlink

while :;
do
clear
logo
echo -ne "\033[?25h"
nl ${TTMP}
echo -e "\033[96;40m"
echo -e "    [^c:Exit,-1:Pre Page,Enter:Next Page,sp:Sequential,rp:Random]"
read -e -r -p "    Selelct Resource ID or playmode or Search:" input
echo -e "\033[0m"
NUM=$(cat ${TTMP}|wc -l)
echo -ne "\033[?25l"
if [[ $input =~ ^-?[0-9]+$ ]] && (( $input > 0 && $input <= $NUM )); then
    echo -e "\033[93;40m"
    echo -e "    ( m:🔇 9:🔈 0:🔊 q:back, space:⏯  up:⏩)\033[0m"
    LINK2=${DOMAIN%/*}"/"$(sed -n "${input}p" "${LTMP}")""
    curl -s ${LINK2} > ${HTMP}
    LINK3=$(cat ${HTMP}|grep ".m4a"|awk -F\' '{print $2}')
    if [[ -z "${LINK3}" ]]; then
        HIFIARG1=$(cat ${HTMP}|grep "get_music"|awk -F\' '{print $2}')
        if [[ -z "${HIFIARG1}" ]]; then
            break
        fi
        HIFIARG2=$(cat ${HTMP}|grep "get_music"|awk -F\' '{print $4}')
        LINK3=${DOMAIN%/*}"/"${HIFIARG1}$(node -e 'require("'${HIFIJS}'").generateParam("'${HIFIARG2}'")')
    fi
    mpv --loop=inf --really-quiet --vid=no --http-header-fields='Referer: https://hifini.com/' "${LINK3}"
elif [[ "$input" == "sp" ]]; then
    echo -e "\033[93;40m"
    echo -e "    ( m:🔇 9:🔈 0:🔊 q:Next Sound, space:⏯  up:⏩ ^c:back)\033[0m"
    while IFS= read -r line
    do
    echo -ne "\033[?25l"
    LINK2=${DOMAIN%/*}"/"${line}
    curl -s ${LINK2} > ${HTMP}
    LINK3=$(cat ${HTMP}|grep ".m4a"|awk -F\' '{print $2}')
    if [[ -z "${LINK3}" ]]; then
        HIFIARG1=$(cat ${HTMP}|grep "get_music"|awk -F\' '{print $2}')
        if [[ -z "${HIFIARG1}" ]]; then
            continue 
        fi
        HIFIARG2=$(cat ${HTMP}|grep "get_music"|awk -F\' '{print $4}')
        LINK3=${DOMAIN%/*}"/"${HIFIARG1}$(node -e 'require("'${HIFIJS}'").generateParam("'${HIFIARG2}'")')
    fi
    mpv --really-quiet --vid=no --http-header-fields='Referer: https://hifini.com/' "${LINK3}"
    if [ $? != 0 ]; then
        break 
    fi
    done < "${LTMP}"
elif [[ "$input" == "rp" ]]; then
    echo -e "\033[93;40m"
    echo -e "    ( m:🔇 9:🔈 0:🔊 q:Next Sound, space:⏯  up:⏩ ^c:back)\033[0m"
    while IFS= read -r line
    do
    echo -ne "\033[?25l"
    LINK2=${DOMAIN%/*}"/"${line}
    curl -s ${LINK2} > ${HTMP}
    LINK3=$(cat ${HTMP}|grep ".m4a"|awk -F\' '{print $2}')
    if [[ -z "${LINK3}" ]]; then
        HIFIARG1=$(cat ${HTMP}|grep "get_music"|awk -F\' '{print $2}')
        if [[ -z "${HIFIARG1}" ]]; then
            continue    
        fi
        HIFIARG2=$(cat ${HTMP}|grep "get_music"|awk -F\' '{print $4}')
        LINK3=${DOMAIN%/*}"/"${HIFIARG1}$(node -e 'require("'${HIFIJS}'").generateParam("'${HIFIARG2}'")')
    fi
    mpv --really-quiet --vid=no --http-header-fields='Referer: https://hifini.com/' "${LINK3}"
    if [ $? != 0 ]; then
        break 
    fi
    done < <(shuf "${LTMP}")
elif [[ -z "$input" ]]; then
    PG=$(($PG+1))
    getlink
    continue
elif [[ "$input" == "-1" ]]; then
    if [[ $PG > 1 ]]; then
        PG=$((($PG)-1))
    else
        PG=1
    fi
    getlink
    continue
else
    KW=$input
    _KW=$(node -e 'require("'${HIFIJS}'").urlencode("'${KW}'")')
    PG=1
    getlink
    continue
fi
done