#!/usr/bin/python2

import pygame as pg
import tempfile
import os
import sys
import time
import struct
from itertools import izip_longest

import cnc_packet
import image

def group(n, iterable, fillvalue=None):
    """
    groups an iterable into chunks of n, filling the last chunk with fillvalue
    if there's anything left over.
    """
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

def display_frame():
    for event in pg.event.get():
        if event.type == pg.QUIT:
            sys.exit(0)

        if event.type == pg.KEYDOWN:
            if event.key == pg.K_q:
                sys.exit(0)


    pg.display.flip()

def display_packet(packet, screen):
    screen.fill((255, 255, 255))

    # display the pixel for as many frames it takes to read it
    start = pg.time.get_ticks()
    blue = 0
    for bytes in group(8, map(ord, packet), fillvalue=255):
        screen.set_at((675, 641), (bytes[0], bytes[1], blue))
        screen.set_at((676, 641), (bytes[2], bytes[3], bytes[4]))
        screen.set_at((677, 641), (bytes[5], bytes[6], bytes[7]))
        for _ in xrange(3):
            display_frame()
        pg.time.delay(20 * 3)
        blue = 1 - blue
    end = pg.time.get_ticks()

def main():
    pg.init()
    screen = pg.display.set_mode((1920,1200), pg.FULLSCREEN|pg.DOUBLEBUF|pg.HWSURFACE)

    lock = image.DellImage("lock_https.gif")
    packet = cnc_packet.build_upload_packet(cnc_packet.build_image_blob(lock, 50, 50))
    display_packet(packet, screen)

    while True:
        x, y = pg.mouse.get_pos()
        packet = cnc_packet.build_cursor_packet(x, y)
        display_packet(packet, screen)


if __name__ == "__main__":
    main()