#!/usr/bin/python3
# -*- coding: UTF-8 -*-
#author:Wos
#youtube music player,support search
import readline
import requests
import os
import sys
import pyperclip

tag = [251,140]
tlink = [] #links
tlist = [] #titles
pn = 1 #page number
lk = "" #search link
premain = "https://invidious.io.lol" #invidious instance 
proxies = {}
pxy = ""


def flushscreen():
    os.system('echo stty')
    os.system('clear')


def show():
    global pn
    flushscreen()
    j = 1
    if len(tlist) == 0:
        return search()
    print("\t\t[youtube music player]")
    print("current instance:\033[92m"+premain+"\033[0m")
    for i in tlist:
        print(str(j)+"):\033[96;40m"+str(i)+"\033[0m")
        j += 1
    
    sid = input("\n(\033[36;40m0:Search,Return:Next Page,-1:Pre Page\033[0m)Choose:")
    if sid == "0":
        return search()
    elif str(sid).strip() == "-1":
        if pn > 1:
            pn -= 1
            url = lk+str(pn)
            get_link(url)
            return show()
        else:
            pn = 1
            url = lk+str(pn)
            get_link(url)
    elif str(sid).strip() == "":
        pn += 1
        url = lk+str(pn)
        get_link(url)
        return show()
    elif sid.isdigit() and int(sid) > 0 and int(sid) < len(tlist)+1:
        play(tlink[int(sid)-1])
        return show()
    else:
        return show()

def get_link(url):
    global tlink,tlist
    tlink,tlist = [],[]
    hdr = {
        "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:102.0) Gecko/20100101 Goanna/5.2 Firefox/102.0 PaleMoon/31.3.0.1",
        "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Language":"zh-CN,en-US;q=0.7,en;q=0.3"
    }
    res = requests.get(url,proxies=proxies,headers=hdr)
    res.encoding = 'utf-8'
    temp = res.text.split("class=\"pure-u-1 pure-u-md-1-4\">")
    i = 1
    while i < len(temp):
        l = temp[i].split("href=\"")[1].split("\"")[0]
        t = temp[i].split("dir=\"auto\">")[1].split("<")[0]
        tlink.append(l)
        tlist.append(t)
        i += 1


def search():
    global premain,lk,pn
    flushscreen()
    lk = ""
    pg = 1
    print("\t\t[youtube music player]")
    print("current instance:\033[92m"+premain+"\033[0m")
    keyword = input("Singer Search:")
    if str(keyword).strip() == "exit()":
        sys.exit()
    elif str(keyword).strip() == "":
        url = premain+"/search?q=music&page=1&date=none&type=video&duration=long&sort=relevance"
        lk = premain+"/search?q=music&date=none&type=video&duration=long&sort=relevance&page="
    else:
        url = premain+"/search?q="+str(keyword)+"+ music&page=1&date=none&type=video&duration=long&sort=relevance"
        lk = premain+"/search?q="+str(keyword)+"+ music&date=none&type=video&duration=long&sort=relevance&page="
    get_link(url)    
    show()




def play(url):
    try:
        vid = str(url).split("watch?v=")[1].split("&")[0]
    except:
        vid = str(url).split("embed/")[1].split("?")[0]
        pass
    i = 0
    temp = ""
    while i < len(tag):
        try:
            url2 = premain+"/latest_version?id="+vid+"&itag="+str(tag[i])
            hdr = {
                'user-agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Goanna/4.8 Firefox/68.0 PaleMoon/29.4.4'
            }
            res = requests.get(url2,headers=hdr,proxies=proxies,allow_redirects=False)
            temp = res.headers['location']
            break
        except:
            i += 1
            continue
    if temp:
        #instance proxy
        #link = premain+"/videoplayback?"+temp.split("videoplayback?")[1]+"&title="+str(vid)
        #google direct link
        link = temp+"&title="+str(vid)
        pyperclip.copy(link)
        cmdline = ("mpv --really-quiet %s \"%s\""%(pxy,link))
        print("\n(\033[93;40mm:mute,9:-vol,0:+vol,q:exit,space:pause,up:forward 1 miniute\033[0m)")
        status = os.system(cmdline)
        if str(status) == "0":
            return
        else:
            return play(url)


if __name__ == '__main__':
    sid = input("Enable Proxy ?(Y/N)")
    if sid == "Y" or sid == "y":
        proxies = {'http':'socks5://127.0.0.1:7891','https':'socks5://127.0.0.1:7891'}
        pxy = ' --http-proxy=http://127.0.0.1:7890'
    search()