from pathlib import Path
import sys
import os
import re
from deemix.utils import canWrite

homedata = Path.home()
userdata = ""
musicdata = ""

def checkPath(path):
    if path == "": return ""
    if not path.is_dir(): return ""
    if not canWrite(path): return ""
    return path

def getConfigFolder():
    global userdata
    if userdata != "": return userdata
    if os.getenv("XDG_CONFIG_HOME") and userdata == "":
        userdata = Path(os.getenv("XDG_CONFIG_HOME"))
        userdata = checkPath(userdata)
    if os.getenv("APPDATA") and userdata == "":
        userdata = Path(os.getenv("APPDATA"))
        userdata = checkPath(userdata)
    if sys.platform.startswith('darwin') and userdata == "":
        userdata = homedata / 'Library' / 'Application Support'
        userdata = checkPath(userdata)
    if userdata == "":
        userdata = homedata / '.config'
        userdata = checkPath(userdata)

    if userdata == "": userdata = Path(os.getcwd()) / 'config'
    else: userdata = userdata / 'deemix'

    if os.getenv("DEEMIX_DATA_DIR"):
        userdata = Path(os.getenv("DEEMIX_DATA_DIR"))
    return userdata

def getMusicFolder():
    global musicdata
    if musicdata != "": return musicdata
    if os.getenv("XDG_MUSIC_DIR") and musicdata == "":
        musicdata = Path(os.getenv("XDG_MUSIC_DIR"))
        musicdata = checkPath(musicdata)
    if (homedata / '.config' / 'user-dirs.dirs').is_file() and musicdata == "":
        with open(homedata / '.config' / 'user-dirs.dirs', 'r') as f:
            userDirs = f.read()
        musicdata_search = re.search(r"XDG_MUSIC_DIR=\"(.*)\"", userDirs)
        if musicdata_search:
            musicdata = musicdata_search.group(1)
            musicdata = Path(os.path.expandvars(musicdata))
            musicdata = checkPath(musicdata)
    if os.name == 'nt' and musicdata == "":
        musicKeys = ['My Music', '{4BD8D571-6D19-48D3-BE97-422220080E43}']
        regData = os.popen(r'reg.exe query "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"').read().split('\r\n')
        for i, line in enumerate(regData):
            if line == "": continue
            if i == 1: continue
            line = line.split('    ')
            if line[1] in musicKeys:
                musicdata = Path(line[3])
                break
        musicdata = checkPath(musicdata)
    if musicdata == "":
        musicdata = homedata / 'Music'
        musicdata = checkPath(musicdata)

    if musicdata == "": musicdata = Path(os.getcwd()) / 'music'
    else: musicdata = musicdata / 'deemix Music'

    if os.getenv("DEEMIX_MUSIC_DIR"):
        musicdata = Path(os.getenv("DEEMIX_MUSIC_DIR"))
    return musicdata
