#!/usr/bin/env python3

from PIL import Image

from ratr0.util import tiles, png_util
import argparse
import math

DESCRIPTION = """ratr0-maketiles - Amiga Image Converter

This tool converts a PNG image into a tile sheet file using parameters specified on the command line"""

if __name__ == '__main__':
    parser = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter,
                                     description=DESCRIPTION)
    parser.add_argument('pngfile', help="input PNG file")
    parser.add_argument('outfile', help="output tile sheet file")
    parser.add_argument('-ts', '--tile_size', default=None, help="dimension of a tile, widthxheight")
    parser.add_argument('-ni', '--non_interleaved', action='store_true',
                        help="store data in interleaved manner")
    parser.add_argument('-p24', '--palette24', action='store_true',
                        help="use a 24 bit palette instead of 12 bit")
    parser.add_argument('-fd', '--force_depth', type=int, default=None,
                        help="set depth to a value greater or equal the input image's value")
    parser.add_argument('-mf', '--mask_file', default=None,
                        help="generate optional 1 bit mask file (PNG format) as a visual debugging control")
    parser.add_argument('-cm', '--create_mask', action='store_true',
                        help="add a mask plane to the image data")
    parser.add_argument('-v', '--verbose', action='store_true', help="run in verbose mode")

    args = parser.parse_args()
    im = Image.open(args.pngfile)
    if args.tile_size is not None:
        tile_size = tuple(map(int, args.tile_size.split('x')))
    else:
        tile_size = im.size
    colors = png_util.make_colors(im, args.force_depth, args.verbose)
    tiles.write_tiles(im, args.outfile, tile_size, colors,
                      palette24=args.palette24,
                      non_interleaved=args.non_interleaved,
                      create_mask=args.create_mask,
                      verbose=args.verbose)

    if args.mask_file is not None:
        tiles.write_mask(args.mask_file, im, tile_size, 1,
                         palette24=args.palette24,
                         non_interleaved=args.non_interleaved,
                         verbose=args.verbose)

