from panda3d.core import *
import ShtikerPage
from direct.gui.DirectGui import *
from toontown.quest import Quests
from toontown.toonbase import ToontownGlobals
from toontown.toonbase import ToontownBattleGlobals
from toontown.toonbase import TTLocalizer
from toontown.toon import Toon
MAX_FRAMES = 18
Track2Anim = {ToontownBattleGlobals.HEAL_TRACK: 'juggle',
 ToontownBattleGlobals.TRAP_TRACK: 'toss',
 ToontownBattleGlobals.LURE_TRACK: 'hypnotize',
 ToontownBattleGlobals.SOUND_TRACK: 'sound',
 ToontownBattleGlobals.THROW_TRACK: 'throw',
 ToontownBattleGlobals.SQUIRT_TRACK: 'firehose',
 ToontownBattleGlobals.DROP_TRACK: 'pushbutton'}

class TrackFrame(DirectFrame):

    def __init__(self, index):
        DirectFrame.__init__(self, relief=None)
        self.initialiseoptions(TrackFrame)
        filmstrip = loader.loadModel('phase_3.5/models/gui/filmstrip')
        self.index = index
        self.frame = DirectFrame(parent=self, relief=None, image=filmstrip, image_scale=1, text=str(self.index - 1), text_pos=(0.26, -0.22), text_fg=(1, 1, 1, 1), text_scale=0.1)
        self.question = DirectLabel(parent=self.frame, relief=None, pos=(0, 0, -0.15), text='?', text_scale=0.4, text_pos=(0, 0.04), text_fg=(0.72, 0.72, 0.72, 1))
        self.toon = None
        filmstrip.removeNode()
        return

    def makeToon(self):
        if not self.toon:
            self.toon = Toon.Toon()
            self.toon.setDNA(base.localAvatar.getStyle())
            self.toon.getGeomNode().setDepthWrite(1)
            self.toon.getGeomNode().setDepthTest(1)
            self.toon.useLOD(500)
            self.toon.reparentTo(self.frame)
            self.toon.setPosHprScale(0, 10, -0.25, 210, 0, 0, 0.12, 0.12, 0.12)
            self.ignore('nametagAmbientLightChanged')

    def play(self, trackId):
        anim = Track2Anim[trackId]
        if self.toon:
            numFrames = self.toon.getNumFrames(anim) - 1
            fromFrame = 0
            toFrame = (self.toon.getNumFrames(anim) - 1) / MAX_FRAMES * self.index
            self.toon.play(anim, None, fromFrame, toFrame - 1)
        return

    def setTrained(self, trackId):
        if self.toon == None:
            self.makeToon()
        anim = Track2Anim[trackId]
        frame = (self.toon.getNumFrames(anim) - 1) / MAX_FRAMES * self.index
        self.toon.pose(anim, frame)
        self.toon.show()
        self.question.hide()
        trackColorR, trackColorG, trackColorB = ToontownBattleGlobals.TrackColors[trackId]
        self.frame['image_color'] = Vec4(trackColorR, trackColorG, trackColorB, 1)
        self.frame['text_fg'] = Vec4(trackColorR * 0.3, trackColorG * 0.3, trackColorB * 0.3, 1)
        return

    def setUntrained(self, trackId):
        if self.toon:
            self.toon.delete()
            self.toon = None
        self.question.show()
        if trackId == -1:
            self.frame['image_color'] = Vec4(0.7, 0.7, 0.7, 1)
            self.frame['text_fg'] = Vec4(0.5, 0.5, 0.5, 1)
            self.question['text_fg'] = Vec4(0.6, 0.6, 0.6, 1)
        else:
            trackColorR, trackColorG, trackColorB = ToontownBattleGlobals.TrackColors[trackId]
            self.frame['image_color'] = Vec4(trackColorR * 0.7, trackColorG * 0.7, trackColorB * 0.7, 1)
            self.frame['text_fg'] = Vec4(trackColorR * 0.3, trackColorG * 0.3, trackColorB * 0.3, 1)
            self.question['text_fg'] = Vec4(trackColorR * 0.6, trackColorG * 0.6, trackColorB * 0.6, 1)
        return


class TrackPage(ShtikerPage.ShtikerPage):

    def __init__(self):
        ShtikerPage.ShtikerPage.__init__(self)
        self.trackFrames = []

    def placeFrames(self):
        rowY = 0.38
        rowSpace = -0.32
        rowPos = []
        for i in xrange(3):
            rowPos.append(rowY)
            rowY += rowSpace

        colX = -0.7
        colSpace = 0.276
        colPos = []
        for i in xrange(6):
            colPos.append(colX)
            colX += colSpace

        for index in xrange(1, MAX_FRAMES + 1):
            frame = self.trackFrames[index - 1]
            col = (index - 1) % 6
            row = (index - 1) / 6
            frame.setPos(colPos[col], 0, rowPos[row])
            frame.setScale(0.39)

    def load(self):
        self.title = DirectLabel(parent=self, relief=None, text=TTLocalizer.TrackPageTitle, text_scale=0.1, pos=(0, 0, 0.65))
        self.subtitle = DirectLabel(parent=self, relief=None, text=TTLocalizer.TrackPageSubtitle, text_scale=0.05, text_fg=(0.5, 0.1, 0.1, 1), pos=(0, 0, 0.56))
        self.trackText = DirectLabel(parent=self, relief=None, text='', text_scale=0.05, text_fg=(0.5, 0.1, 0.1, 1), pos=(0, 0, -0.5))
        for index in xrange(1, MAX_FRAMES + 1):
            frame = TrackFrame(index)
            frame.reparentTo(self)
            self.trackFrames.append(frame)

        self.placeFrames()
        self.startFrame = self.trackFrames[0]
        self.endFrame = self.trackFrames[-1]
        self.startFrame.frame['text'] = ''
        self.startFrame.frame['text_scale'] = TTLocalizer.TPstartFrame
        self.startFrame.frame['image_color'] = Vec4(0.2, 0.2, 0.2, 1)
        self.startFrame.frame['text_fg'] = (1, 1, 1, 1)
        self.startFrame.frame['text_pos'] = (0, 0.08)
        self.startFrame.question.hide()
        self.endFrame.frame['text'] = TTLocalizer.TrackPageDone
        self.endFrame.frame['text_scale'] = TTLocalizer.TPendFrame
        self.endFrame.frame['image_color'] = Vec4(0.2, 0.2, 0.2, 1)
        self.endFrame.frame['text_fg'] = (1, 1, 1, 1)
        self.endFrame.frame['text_pos'] = (0, 0)
        self.endFrame.question.hide()
        return

    def unload(self):
        del self.title
        del self.subtitle
        del self.trackText
        del self.trackFrames
        ShtikerPage.ShtikerPage.unload(self)

    def clearPage(self):
        for index in xrange(1, MAX_FRAMES - 1):
            self.trackFrames[index].setUntrained(-1)

        self.startFrame.frame['text'] = ''
        self.trackText['text'] = TTLocalizer.TrackPageClear

    def updatePage(self):
        trackId, trackProgress = base.localAvatar.getTrackProgress()
        if trackId == -1:
            self.clearPage()
        else:
            trackName = ToontownBattleGlobals.Tracks[trackId].capitalize()
            self.trackText['text'] = TTLocalizer.TrackPageTraining % (trackName, trackName)
            trackProgressArray = base.localAvatar.getTrackProgressAsArray()
            for index in xrange(1, MAX_FRAMES - 2):
                if trackProgressArray[index - 1]:
                    self.trackFrames[index].setTrained(trackId)
                else:
                    self.trackFrames[index].setUntrained(trackId)

            self.trackFrames[MAX_FRAMES - 2].setUntrained(trackId)
            self.startFrame.frame['text'] = TTLocalizer.TrackPageFilmTitle % trackName

    def enter(self):
        self.updatePage()
        ShtikerPage.ShtikerPage.enter(self)

    def exit(self):
        self.clearPage()
        ShtikerPage.ShtikerPage.exit(self)