#!/usr/bin/env python3

import sys
import os
from subprocess import call
import re
import subprocess

def findnext(str, start, chr):
    depth = 0
    for i in range(start, len(str)):
        if (str[i] == chr): return i;

def findclose(str, start):
    depth = 0
    for i in range(start, len(str)):
        if (str[i] == '{'): depth = depth+1;
        if (str[i] == '}'): depth = depth-1;
        if (depth == 0): return i;

def countnl(str, start, end):
    cnt = 0
    for i in range(start, end+1):
        if (str[i] == '\n'): cnt = cnt+1;
    return cnt;

fsource = str.replace(sys.argv[1], '\\', '/')  # scss
finput  = str.replace(sys.argv[2], '\\', '/')  # css
foutput = str.replace(sys.argv[3], '\\', '/')  # min.css
ftemp = '__temp_compresss_py_yui.tmp.css';

print('======== INPUT ========');
print();
print(fsource);
print(finput);
print(foutput);
print();
print();

print('======== CALL SCSS ========');
out = subprocess.run(['scss.bat', '--no-cache', '--update', fsource + ':' + finput], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print('> scss.bat --no-cache --update ' + fsource + ':' + finput)
print('STDOUT:')
print(out.stdout.decode('utf-8'))
print('STDERR:')
print(out.stderr.decode('utf-8'))

print('')
print('')


print('======== CALL YUI ========');
out = subprocess.run(['java', '-jar', 'yuicompressor.jar', '--verbose', finput, '-o', ftemp], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print('> java -jar yuicompressor.jar --verbose "'+finput+'" -o "'+ftemp+'"')
print('STDOUT:');
print(out.stdout.decode('utf-8'))
print('STDERR:');
print(out.stderr.decode('utf-8'))

print('')
print('')

print('======== READ ========');
with open(ftemp, 'r') as tf:
    data = tf.read()
    print(str(len(data)) + ' characters read from ' + ftemp)

print('')
print('')

print('======== REM ========');
try:
    os.remove(ftemp);
    print(ftemp + ' deleted')
except e:
    print(e)

print('')
print('')

print('======== REGEX ========');
data = re.sub(r'(\}*\})', '\g<1>\n', data);

print('css data modified (1)')

print('')
print('')

print('======== MEDIA ========');
ins = []
for i in range(len(data)):
    if data[i:].startswith('@media'):


        copen = findnext(data, i, '{')
        cclose = findclose(data, copen)

        if (countnl(data, copen, cclose) == 0): continue;

        ins.append( (copen+1, '\n\t') )
        for i in range(copen+1, cclose):
            if data[i] == '\n':
                tp =(i+1, '\t')
                ins.append( tp )
        ins.append((cclose, '\n'))
        print('media query at idx:' + str(i) + ' formatted')

for (l, c) in reversed(ins):
    data = data[:l] + c + data[l:]

print('')
print('')

print('======== WRITE ========');
with open(foutput, "w") as tf:
    tf.write(data)
    print(str(len(data)) + ' characters written to ' + foutput)

print('')
print('')
print('Finished.')
