from .unit import Unit
from .bomb import Explosion
from engine.collision_system import CollisionLayer

class Mine(Unit):
    def __init__(self, game, position=(0,0), id=None):
        super().__init__(game, position, id, collision_layer=CollisionLayer.MINE)
        self.speed = 1.0  # Mine doesn't move but needs speed for consistency
        self.armed = True  # Mine is active and ready to explode

    def move(self):
        """Mines don't move, but we need to check for collision with rats each frame."""
        pass
        
    def collisions(self):
        """Check if a rat steps on the mine using optimized collision system."""
        if not self.armed:
            return
        
        # Use collision system to check for rats at mine's position_before
        victim_ids = self.game.collision_system.get_units_in_cell(
            self.position, use_before=True
        )
        
        for victim_id in victim_ids:
            rat_unit = self.game.get_unit_by_id(victim_id)
            if rat_unit and hasattr(rat_unit, 'sex'):  # Check if it's a rat
                # Mine explodes and kills the rat
                self.explode(rat_unit)
                break
                
    def explode(self, victim_rat):
        """Mine explodes, killing the rat and destroying itself."""
        if not self.armed:
            return

        self.game.render_engine.play_sound("POISON.WAV")

        # Kill the rat that stepped on the mine
        if victim_rat.id in self.game.units:
            victim_rat.die(score=5)
        
        # Remove the mine from the game
        self.die()
        
    def draw(self):
        """Draw the mine using the mine asset."""
        if not self.armed:
            return
            
        # Use mine asset
        image = self.game.assets["BMP_POISON"]
        image_size = self.game.render_engine.get_image_size(image)
        
        # Center the mine in the cell
        x_pos = self.position[0] * self.game.cell_size + (self.game.cell_size - image_size[0]) // 2
        y_pos = self.position[1] * self.game.cell_size + (self.game.cell_size - image_size[1]) // 2
        
        self.game.render_engine.draw_image(x_pos, y_pos, image, anchor="nw", tag="unit")
        
    def die(self, score=None):
        """Remove mine from game and disarm it."""
        self.armed = False
        super().die(score)
