
import os
import sys

PNGQUANT_EXT_END = '_new.png'

# 返回 0 表示压缩成功
def cmd_pngquant(png_path, ext_end = PNGQUANT_EXT_END):
    # -f 覆盖已存在的文件
    cmd = "{pngquant} --quality=80-99 -f --ext={0} --speed=3 {1}".format(
        ext_end, png_path, pngquant='.git/hooks/pngquant')
    return os.system(cmd)

# 压缩、比对、替换
def quant_and_check(origin_png):
    result = cmd_pngquant(origin_png)
    if result == 0:
        # 转换成功
        size_origin = os.path.getsize(origin_png)
        new_png_path = os.path.splitext(origin_png)[0] + PNGQUANT_EXT_END
        size_new = os.path.getsize(new_png_path)
        if size_origin * ( 1 - MIN_REDUCE_R ) > size_new :
            # 达到压缩阈值,删除原始文件，重命临时文件使其变为正式文件
            os.remove(origin_png)
            os.rename(new_png_path, origin_png)
            #print('quant done:' + origin_png)
        else:
            # 未达阈值，删除临时文件
            # print('quant pass:' + origin_png)
            os.remove(new_png_path)
    else:
        pass

def _cmd_get_new_pngs(tag = 'new file', split = ':'):
    png_arr=[]
    cmd = "git status | grep '{tag}' | grep '\.png'".format(tag = tag)
    result = os.popen(cmd)
    for line in result:
        if len(line) > 0:
            png_str = line.replace(' ',"").replace('\n','')
            temp_arr = png_str.split(split)
            png_arr.append(temp_arr[1])
    return png_arr

png_arr = _cmd_get_new_pngs()
if not png_arr:
    png_arr = _cmd_get_new_pngs(tag = '新文件',split ='：')

modify_png_arr = _cmd_get_new_pngs(tag='modified')
if not modify_png_arr:
    modify_png_arr = _cmd_get_new_pngs(tag='修改',split ='：')

png_arr.extend(modify_png_arr)

#print(png_arr)

for png_path in png_arr:
    unstage = 'git restore --staged '+png_path
    os.system(unstage)
    quant_and_check(png_path)
    cmd = 'git add '+png_path
    os.system(cmd)

print("python pre-commit finish")