from panda3d.core import *
from toontown.toonbase.ToontownGlobals import *
from direct.gui.DirectGui import *
from panda3d.core import *
from direct.showbase import DirectObject
from direct.directnotify import DirectNotifyGlobal
from toontown.toonbase import TTLocalizer
from toontown.pets import PetTricks
from otp.otpbase import OTPLocalizer
from direct.showbase.PythonUtil import lerp
FUDGE_FACTOR = 0.01

class PetDetailPanel(DirectFrame):
    notify = DirectNotifyGlobal.directNotify.newCategory('PetDetailPanel')

    def __init__(self, pet, closeCallback, parent = aspect2d, **kw):
        buttons = loader.loadModel('phase_3/models/gui/dialog_box_buttons_gui')
        gui = loader.loadModel('phase_3.5/models/gui/avatar_panel_gui')
        detailPanel = gui.find('**/PetBattlePannel2')
        optiondefs = (('pos', (-4.52, 0.0, 3.05), None),
         ('scale', 3.58, None),
         ('relief', None, None),
         ('image', detailPanel, None),
         ('image_color', GlobalDialogColor, None),
         ('text', TTLocalizer.PetDetailPanelTitle, None),
         ('text_wordwrap', 10.4, None),
         ('text_scale', 0.132, None),
         ('text_pos', (-0.2, 0.6125), None))
        self.defineoptions(kw, optiondefs)
        DirectFrame.__init__(self, parent)
        self.dataText = DirectLabel(self, text='', text_scale=0.09, text_align=TextNode.ALeft, text_wordwrap=15, relief=None, pos=(-0.7, 0.0, 0.55))
        self.bCancel = DirectButton(self, image=(buttons.find('**/CloseBtn_UP'), buttons.find('**/CloseBtn_DN'), buttons.find('**/CloseBtn_Rllvr')), relief=None, text=TTLocalizer.AvatarDetailPanelCancel, text_scale=0.05, text_pos=(0.12, -0.01), pos=(-0.88, 0.0, -0.68), scale=2.0, command=closeCallback)
        self.initialiseoptions(PetDetailPanel)
        self.labels = {}
        self.bars = {}
        self.update(pet)
        buttons.removeNode()
        gui.removeNode()
        return

    def cleanup(self):
        del self.labels
        del self.bars
        self.destroy()

    def update(self, pet):
        if not pet:
            return
        for trickId in list(PetTricks.TrickId2scIds.keys()):
            trickText = TTLocalizer.PetTrickStrings[trickId]
            if trickId < len(pet.trickAptitudes):
                aptitude = pet.trickAptitudes[trickId]
                bar = self.bars.get(trickId)
                label = self.bars.get(trickId)
                if aptitude != 0:
                    healRange = PetTricks.TrickHeals[trickId]
                    hp = lerp(healRange[0], healRange[1], aptitude)
                    if hp == healRange[1]:
                        hp = healRange[1]
                        length = 1
                        barColor = (0.7, 0.8, 0.5, 1)
                    else:
                        hp, length = divmod(hp, 1)
                        barColor = (0.9, 1, 0.7, 1)
                    if not label:
                        self.labels[trickId] = DirectLabel(parent=self, relief=None, pos=(0, 0, 0.43 - trickId * 0.155), scale=0.7, text=trickText, text_scale=TTLocalizer.PDPtrickText, text_fg=(0.05, 0.14, 0.4, 1), text_align=TextNode.ALeft, text_pos=(-1.4, -0.05))
                    else:
                        label['text'] = trickText
                    if not bar:
                        self.bars[trickId] = DirectWaitBar(parent=self, pos=(0, 0, 0.43 - trickId * 0.155), relief=DGG.SUNKEN, frameSize=(-0.5,
                         0.9,
                         -0.1,
                         0.1), borderWidth=(0.025, 0.025), scale=0.7, frameColor=(0.4, 0.6, 0.4, 1), barColor=barColor, range=1.0 + FUDGE_FACTOR, value=length + FUDGE_FACTOR, text=str(int(hp)) + ' ' + TTLocalizer.Laff, text_scale=TTLocalizer.PDPlaff, text_fg=(0.05, 0.14, 0.4, 1), text_align=TextNode.ALeft, text_pos=TTLocalizer.PDPlaffPos)
                    else:
                        bar['value'] = length + FUDGE_FACTOR
                        bar['text'] = (str(int(hp)) + ' ' + TTLocalizer.Laff,)

        return