#!/usr/bin/env python

import sys, urllib, os, re, json, requests

COMMAND='glslViewer'
SHADER_PATH = ''

TMP_DIR = '/tmp/'
TMP_SHD = TMP_DIR + 'shader.frag'

if len(sys.argv) > 1:
    SHADER_PATH = sys.argv[1]
else:
    print 'This script dowload a shader and their resorces:\nUse:\n$ ./glslLoader.py [URL|LOG_#]\n'
    exit()

if SHADER_PATH.isdigit():
    SHADER_PATH='https://thebookofshaders.com/log/' + SHADER_PATH + '.frag'

if SHADER_PATH.startswith('http'):
    http = urllib.URLopener()
    http.retrieve(SHADER_PATH, TMP_SHD)
    SHADER_PATH=TMP_SHD
elif SHADER_PATH.split(".")[-1] != 'frag':
    url = 'https://www.shadertoy.com/api/v1/shaders/' + SHADER_PATH + '?key=rt8tWH'
    print url

    resp = requests.get(url=url)
    data = json.loads(resp.text)
    if len(data['Shader']['renderpass']) == 1:
        if data['Shader']['renderpass'][0]['type'] == 'image':
            file = open(TMP_SHD, 'w')
            file.write(data['Shader']['renderpass'][0]['code'])
            file.close()
            SHADER_PATH=TMP_SHD
        else:
            print "glslViewer: doesn't support audio shaders from ShaderToy.com"
            exit()
    else:
        print "glslViewer: doesn't support multiple render passes from ShaderToy.com"
        exit()


COMMAND += ' ' + SHADER_PATH
counter=0
with open(SHADER_PATH) as f:
    for line in f:
        result = re.search('uniform\\s*sampler2D\\s*([\\w]*);\\s*\\/\\/\\s*([\\w|\\:\\/\\/|\\.|\\-|\\_]*)', line, re.M)
        if result:
            uniform = result.group(1)
            if uniform == "u_backbuffer":
                continue
            url = result.group(2)
            ext = os.path.splitext(url)[1]
            img_path = TMP_DIR + str(counter) + ext
            print counter,uniform,url,ext
            http = urllib.URLopener()
            http.retrieve(url, img_path)
            COMMAND += ' -' + uniform + ' ' + img_path
            counter += 1

print COMMAND
os.system(COMMAND)
