import random

from direct.directnotify import DirectNotifyGlobal
from direct.directnotify import DirectNotifyGlobal
from direct.distributed import ClockDelta
from direct.interval.IntervalGlobal import *
from direct.task import Task
from otp.ai.AIBase import *
from otp.level import BasicEntities
from otp.level import DistributedEntityAI
from toontown.coghq import BattleBlockerAI
from toontown.coghq import LaserGameMineSweeper
from toontown.coghq import LaserGameRoll


class DistributedSecurityCameraAI(DistributedEntityAI.DistributedEntityAI, NodePath, BasicEntities.NodePathAttribs):
    def __init__(self, level, entId):
        DistributedEntityAI.DistributedEntityAI.__init__(self, level, entId)
        node = hidden.attachNewNode('DistributedSecurityCameraAI')
        NodePath.__init__(self, node)
        if not hasattr(self, 'switchId'):
            self.switchId = 0

        if not hasattr(self, 'damPow'):
            self.damPow = 1

        self.enabled = 1
        self.detectName = None

    def generate(self):
        DistributedEntityAI.DistributedEntityAI.generate(self)
        if self.switchId != 0:
            self.accept(self.getOutputEventName(self.switchId), self.reactToSwitch)

        self.detectName = 'laserField %s' % self.doId
        taskMgr.doMethodLater(3.0, self._DistributedSecurityCameraAI__detect, self.detectName)
        self.setPos(self.pos)
        self.setHpr(self.hpr)

    def delete(self):
        if self.detectName:
            taskMgr.remove(self.detectName)

        self.ignoreAll()
        DistributedEntityAI.DistributedEntityAI.delete(self)

    def destroy(self):
        self.notify.info('destroy entity(laserField) %s' % self.entId)
        DistributedEntityAI.DistributedEntityAI.destroy(self)

    def _DistributedSecurityCameraAI__detect(self, task):
        isThereAnyToons = False
        if hasattr(self, 'level'):
            toonInRange = 0
            for avId in self.level.presentAvIds:
                if avId in self.air.doId2do:
                    av = self.air.doId2do[avId]
                    isThereAnyToons = True
                    distance = self.getDistance(av)
                    continue

            if isThereAnyToons:
                randTime = float(random.randint(1, 6)) * 0.5
                taskMgr.doMethodLater(randTime, self._DistributedSecurityCameraAI__detect, self.detectName)
                randTarget = random.randint(0, 100)
                self.sendUpdate('setTarget', [
                    randTarget])


        return Task.done

    def hit(self, hitX, hitY):
        if self.enabled:
            self.game.hit(hitX, hitY)

    def reactToSwitch(self, on):
        if on:
            self.trapDisable()
            self.game.win()

    def trapFire(self):
        avId = self.air.getAvatarIdFromSender()
        toon = self.air.doId2do[avId]
        if toon:
            toon.takeDamage(self.damPow)

    def trapDisable(self):
        self.enabled = 0