from direct.gui.DirectGui import *
from panda3d.core import *
from toontown.toonbase import ToontownTimer
from toontown.toonbase import ToontownGlobals
from toontown.toonbase import ToontownBattleGlobals
from toontown.toonbase import TTLocalizer

class TrackPoster(DirectFrame):
    normalTextColor = (0.3, 0.25, 0.2, 1)

    def __init__(self, trackId, callback):
        DirectFrame.__init__(self, relief=None)
        self.initialiseoptions(TrackPoster)
        bookModel = loader.loadModel('phase_3.5/models/gui/stickerbook_gui')
        trackName = ToontownBattleGlobals.Tracks[trackId].capitalize()
        self.poster = DirectFrame(parent=self, relief=None, image=bookModel.find('**/questCard'), image_scale=(0.8, 0.58, 0.58))
        invModel = loader.loadModel('phase_3.5/models/gui/inventory_icons')
        iconGeom = invModel.find('**/' + ToontownBattleGlobals.AvPropsNew[trackId][1])
        invModel.removeNode()
        self.pictureFrame = DirectFrame(parent=self.poster, relief=None, image=bookModel.find('**/questPictureFrame'), image_scale=0.25, image_color=(0.45, 0.8, 0.45, 1), text=trackName, text_font=ToontownGlobals.getInterfaceFont(), text_pos=(0, -0.16), text_fg=self.normalTextColor, text_scale=0.05, text_align=TextNode.ACenter, text_wordwrap=8.0, textMayChange=0, geom=iconGeom, pos=(-0.2, 0, 0.06))
        bookModel.removeNode()
        if trackId == ToontownBattleGlobals.HEAL_TRACK:
            help = TTLocalizer.TrackChoiceGuiHEAL
        elif trackId == ToontownBattleGlobals.TRAP_TRACK:
            help = TTLocalizer.TrackChoiceGuiTRAP
        elif trackId == ToontownBattleGlobals.LURE_TRACK:
            help = TTLocalizer.TrackChoiceGuiLURE
        elif trackId == ToontownBattleGlobals.SOUND_TRACK:
            help = TTLocalizer.TrackChoiceGuiSOUND
        elif trackId == ToontownBattleGlobals.DROP_TRACK:
            help = TTLocalizer.TrackChoiceGuiDROP
        else:
            help = ''
        self.helpText = DirectFrame(parent=self.poster, relief=None, text=help, text_font=ToontownGlobals.getInterfaceFont(), text_fg=self.normalTextColor, text_scale=0.05, text_align=TextNode.ALeft, text_wordwrap=8.0, textMayChange=0, pos=(-0.05, 0, 0.14))
        guiButton = loader.loadModel('phase_3/models/gui/quit_button')
        self.chooseButton = DirectButton(parent=self.poster, relief=None, image=(guiButton.find('**/QuitBtn_UP'), guiButton.find('**/QuitBtn_DN'), guiButton.find('**/QuitBtn_RLVR')), image_scale=(0.7, 1, 1), text=TTLocalizer.TrackChoiceGuiChoose, text_scale=0.06, text_pos=(0, -0.02), command=callback, extraArgs=[trackId], pos=(0, 0, -0.16), scale=0.8)
        guiButton.removeNode()
        return


class TrackChoiceGui(DirectFrame):

    def __init__(self, tracks, timeout):
        DirectFrame.__init__(self, relief=None, geom=DGG.getDefaultDialogGeom(), geom_color=Vec4(0.8, 0.6, 0.4, 1), geom_scale=(1.5, 1, 0.9), geom_hpr=(0, 0, -90), pos=(-0.85, 0, 0))
        self.initialiseoptions(TrackChoiceGui)
        guiButton = loader.loadModel('phase_3/models/gui/quit_button')
        self.cancelButton = DirectButton(parent=self, relief=None, image=(guiButton.find('**/QuitBtn_UP'), guiButton.find('**/QuitBtn_DN'), guiButton.find('**/QuitBtn_RLVR')), image_scale=(0.7, 1, 1), text=TTLocalizer.TrackChoiceGuiCancel, pos=(0.15, 0, -0.625), text_scale=0.06, text_pos=(0, -0.02), command=self.chooseTrack, extraArgs=[-1])
        guiButton.removeNode()
        self.timer = ToontownTimer.ToontownTimer()
        self.timer.reparentTo(self)
        self.timer.setScale(0.35)
        self.timer.setPos(-0.2, 0, -0.6)
        self.timer.countdown(timeout, self.timeout)
        self.trackChoicePosters = []
        for trackId in tracks:
            tp = TrackPoster(trackId, self.chooseTrack)
            tp.reparentTo(self)
            self.trackChoicePosters.append(tp)

        self.trackChoicePosters[0].setPos(0, 0, -0.2)
        self.trackChoicePosters[1].setPos(0, 0, 0.4)
        return

    def chooseTrack(self, trackId):
        self.timer.stop()
        messenger.send('chooseTrack', [trackId])

    def timeout(self):
        messenger.send('chooseTrack', [-1])