'''
Created on 28 aout 2009

@author: Samuel Benveniste
'''

import os
import sys
import subprocess
import re

import pygame
import pygame.midi
import pickle

from gui.constants import *

from gui.PlayingScreen import PlayingScreen
from gui.SongPlayingScreen import SongPlayingScreen
from gui.InstrumentChoice import InstrumentChoice
from instruments.Instrument import Instrument
from cursor.WarpingCursor import *
from controllers.Wiimote import Wiimote
from songs.Song import Song


class Log:
    '''
    classdocs
    '''


    def __init__(self,eventLog,scale,extendedScale,cascade,song,mode,activeWiimotes,easyMode = True):
        '''
        Constructor
        '''
        self.eventLog = eventLog
        self.scale = scale
        self.extendedScale = extendedScale
        self.cascade = cascade
        self.song = song
        self.activeWiimotes = activeWiimotes
        self.mode = mode    
        
if __name__ == '__main__':
        
        f = file('../../saves/4-12-2009-B1-v50-1.mwi', 'r')
        unpickler = pickle.Unpickler(f)
        log = unpickler.load()
        f.close()
        
        pygame.init()
        pygame.midi.init()
        instruments = [Instrument(scaleDict["majorScale"], i + 1, "".join(["../instruments/instrumentImages/", instrumentImagePathList[i], ".jpg"]), octaves[i]) for i in range(9)]
        
        joys = [[id,pygame.joystick.Joystick(id).get_name()] for id in range(pygame.joystick.get_count())]
        for joy in joys:
            if joy[1] in joyNames:
                pygame.joystick.Joystick(joy[0]).init() 
        
        ports = [pygame.midi.get_device_info(id)[1] for id in range(pygame.midi.get_count())]
        portOffset = ports.index(portNames[0])
        print(portOffset)
        
        modeResolution = (1024,768)
        window = pygame.display.set_mode(modeResolution,pygame.FULLSCREEN)
        screen = pygame.display.get_surface()
        clock = pygame.time.Clock()        
        cursorImages=[['../cursor/cursorImages/black/10.png'],['../cursor/cursorImages/red/10.png'],['../cursor/cursorImages/blue/10.png'],['../cursor/cursorImages/green/10.png']]
        durations = [75 for i in range(len(cursorImages[0]))]
        
        wiimoteCount = 4
        cursors = [WarpingCursor(None, cursorImages[i], durations, (300 * i, 300 * i),flashImage = '../cursor/cursorImages/black/flash.png' ) for i in range(wiimoteCount)]
        wiimotes = [Wiimote(i, i + portOffset, None, None, cursors[i]) for i in range(wiimoteCount)]
        
        if log.song != None :
            
            if log.mode == 0 :
                log.extendedScale = log.song.requiresExtendedScale
                log.cascade = True
                log.easyMode = True
            elif log.mode == 1 :
                log.extendedScale = log.song.requiresExtendedScale
                log.cascade = True
                log.easyMode = True
            elif log.mode == 2:
                log.extendedScale = log.song.requiresExtendedScale
                log.cascade = False
                log.easyMode = True
            elif log.mode == 3:
                log.extendedScale = True
                log.cascade = False
                log.easyMode = False
                
            choice = InstrumentChoice(instruments, wiimotes, window, screen, clock, joys, portOffset,log.activeWiimotes, eventLog = log.eventLog,scaleFactor = songScaleFactor,replay = True)
            play = SongPlayingScreen(choice, log.song,log.cascade, log.extendedScale,log.easyMode)
        
        else:
            
            if log.mode == 0 :
                log.extendedScale = False
                log.cascade = False
            elif log.mode == 1 :
                log.extendedScale = True
                log.cascade = False
            elif log.mode == 2:
                log.extendedScale = False
                log.cascade = True
            elif log.mode == 3:
                log.extendedScale = True
                log.cascade = True
                
            choice = InstrumentChoice(instruments, wiimotes, window, screen, clock, joys, portOffset,log.activeWiimotes,eventLog = log.eventLog,replay = True)
            play = PlayingScreen(choice, None,log.cascade, log.extendedScale)            
                
        while play.backToInstrumentChoice == True :
            
            for wiimote in wiimotes:
                del wiimote.port
                
            wiimotes = [Wiimote(i, i + portOffset, None, None, cursors[i]) for i in range(wiimoteCount)]
            previousEventLog = play.eventLog

            if log.song != None :
                choice = InstrumentChoice(instruments, wiimotes,window, screen, clock, joys, portOffset, log.activeWiimotes,eventLog = previousEventLog, replay = True, scaleFactor = songScaleFactor)
                play = SongPlayingScreen(choice, log.song, False, log.extendedScale,log.easyMode)
            else:
                choice = InstrumentChoice(instruments, wiimotes, log.window, screen, clock, joys, portOffset,log.activeWiimotes, eventLog = previousEventLog, replay = True)
                play = PlayingScreen(choice, None, log.cascade, log.extendedScale)
                               
        for wiimote in wiimotes:
                del wiimote.port
        
        pygame.midi.quit()
        pygame.quit()