from __future__ import annotations
from typing import TYPE_CHECKING

from game.factions.faction import Faction
from game.theater.theatergroundobject import TheaterGroundObject

from gen.sam.group_generator import ShipGroupGenerator
from dcs.unittype import ShipType
from dcs.ships import Oliver_Hazzard_Perry_class, USS_Arleigh_Burke_IIa

if TYPE_CHECKING:
    from game.game import Game


class DDGroupGenerator(ShipGroupGenerator):

    def __init__(self, game: Game, ground_object: TheaterGroundObject, faction: Faction, ddtype: ShipType):
        super(DDGroupGenerator, self).__init__(game, ground_object, faction)
        self.ddtype = ddtype

    def generate(self):
        self.add_unit(self.ddtype, "DD1", self.position.x + 500, self.position.y + 900, self.heading)
        self.add_unit(self.ddtype, "DD2", self.position.x + 500, self.position.y - 900, self.heading)
        self.get_generated_group().points[0].speed = 20


class OliverHazardPerryGroupGenerator(DDGroupGenerator):
    def __init__(self, game: Game, ground_object: TheaterGroundObject, faction: Faction):
        super(OliverHazardPerryGroupGenerator, self).__init__(game, ground_object, faction, Oliver_Hazzard_Perry_class)


class ArleighBurkeGroupGenerator(DDGroupGenerator):
    def __init__(self, game: Game, ground_object: TheaterGroundObject, faction: Faction):
        super(ArleighBurkeGroupGenerator, self).__init__(game, ground_object, faction, USS_Arleigh_Burke_IIa)
