#! /usr/bin/env python3

import argparse

import cairocffi as cairo

from rpgmap.gridmap import GridMap

__version__ = '0.1.0'

def draw_compass(context, x, y, scale, rotation):
    """
    TODO: This should draw a compass. Right now it just makes
    random lines/boxes.
    """
    context.move_to(x-25*scale, scale*50+y)
    context.line_to(x+25*scale, scale*50+y)
    context.stroke()

    context.rectangle(100,100,500,500)
    context.set_line_width(14)
    context.stroke()

    context.set_line_width(3)
    context.set_source_rgb(1,1,1)
    context.rectangle(200,200,600,600)
    context.fill()

def draw_square_grid(context, length, separation):
    max_ind = length // separation
    context.set_line_width(1)

    for i in range(max_ind):
        # Horizontal lines
        context.move_to(0, i*separation+0.5)
        context.line_to(length, i*separation+0.5)
        context.stroke()

        # Vertical lines
        context.move_to(i*separation+0.5, 0)
        context.line_to(i*separation+0.5, length)
        context.stroke()

def draw_solid_background(context):
    context.paint()

#surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 300, 200)
#context = cairo.Context(surface)
#with context:
#    context.set_source_rgb(1,1,1)
#    context.paint()
## Restore the default source, which is black
#draw_square_grid(context, 200, 10)
#
#draw_compass(context, 5, 7, 1, 0)
#
#context.move_to(90, 140)
#context.rotate(-0.5)
#context.set_font_size(20)
#context.show_text("Hi!")
#surface.write_to_png('example.png')

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('outfile', help='File to write output to')
    parser.add_argument('-V', '--version', action='version', version=__version__)
    parser.add_argument('-v', '--verbose', action='store_true')
    parser.add_argument('-m', '--map-type', help='Type of map')
    parser.add_argument('-x', '--xlimit', type=int, default=50)
    parser.add_argument('-y', '--ylimit', type=int, default=50)
    args = parser.parse_args()

    #######################
    # Map logic starts here
    #######################

    # Set up map dimensions
    x = args.xlimit
    y = args.ylimit

    genmap = GridMap(x, y)
    genmap.generate_cave(4, 51)
    genmap.placeEntrance(x//2, y//2)

    surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, x*70, y*70)
    context = cairo.Context(surface)

    context.set_source_rgb(0.3, 0.3, 0.3)
    draw_solid_background(context)

    genmap.draw(context, 70)

    surface.write_to_png(args.outfile)


if __name__ == '__main__':
    main()

