#!/usr/bin/env python3
import argparse
import json
import os
import shutil
import sys

from PIL import Image


DESCRIPTION = """\
"""


REPO_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
AVATAR_PARTS_DIR = os.path.join(REPO_DIR, 'avatar-parts')
OUT_DIR = os.path.join(REPO_DIR, 'app', 'src', 'main', 'assets', 'parts')
PARTS_JSON_PATH = os.path.join(OUT_DIR, 'parts.json')


def main():
    parser = argparse.ArgumentParser()
    parser.description = DESCRIPTION

    parser.add_argument('-n', '--dry-run', action='store_true',
                        help='Simulate')

    args = parser.parse_args()

    if not args.dry_run:
        try:
            shutil.rmtree(OUT_DIR)
        except FileNotFoundError:
            pass
        os.makedirs(OUT_DIR, exist_ok=True)

    # ["category", "filename", x, y]
    part_list = []
    for filename in os.listdir(AVATAR_PARTS_DIR):
        category, num = filename.split('_')
        num = int(num.split('.')[0])

        image = Image.open(os.path.join(AVATAR_PARTS_DIR, filename))
        bbox = image.getbbox()
        if bbox is None:
            filename = ''
            bbox = -1, -1
        else:
            if not args.dry_run:
                print('Cropping {}'.format(filename))
                out_path = os.path.join(OUT_DIR, filename)
                image.crop(bbox).save(out_path)

        part = (category, filename, bbox[0], bbox[1])
        part_list.append(((category, num), part))

    part_list = [x[1] for x in sorted(part_list, key=lambda x: x[0])]

    if args.dry_run:
        print(part_list)
    else:
        with open(PARTS_JSON_PATH, 'w') as fp:
            json.dump(part_list, fp)

    return 0


if __name__ == '__main__':
    sys.exit(main())
# vi: ts=4 sw=4 et
