from dcs.countries import Russia, USA
import dcs.unit as unit
from dcs.mission import Mission
import dcs.mapping as mapping
import dcs.ships
import dcs.vehicles
import dcs.statics
import dcs.unit
import random


class VehicleTemplate:

    class CombinedJointTaskForcesBlue:

        @staticmethod
        def zone_farp(mission, country, farp_country, position, heading, name, late_activation):
            # ai air units attack farp with late activation units, so we will set it to enemy coalition.  It will be captured when frienly units spawn
            farp = mission.farp(farp_country, name, position, hidden=False, dead=False, farp_type=dcs.unit.InvisibleFARP)

            vg = mission.vehicle_group_platoon(
                country,
                name + " Static",
                [
                    dcs.vehicles.Unarmed.M_818,
                    dcs.vehicles.AirDefence.Vulcan,
                    dcs.vehicles.Unarmed.Ural_375,
                    dcs.vehicles.Unarmed.M978_HEMTT_Tanker,
                ],
                position.point_from_heading(45, 7),
                heading=random.randint(0, 359),
                formation=dcs.unitgroup.VehicleGroup.Formation.Star,

            )
            vg.late_activation = late_activation
            return vg


        @staticmethod
        def logistics_site(mission, country, position, heading, prefix=""):

            farp = mission.farp(country, "Logistics FARP", position, hidden=False, dead=False, farp_type=dcs.unit.InvisibleFARP)

            sg = mission.static_group(
                country,
                prefix + " Logistics",
                dcs.statics.Fortification.TV_tower,
                position.point_from_heading(heading, 80),
                heading
            )

            dist_from_center = 30

            for i in range(1,4):

                u = mission.static("logistic" + str(i), dcs.statics.Cargo.Iso_container_small)
                u.position = position.point_from_heading(heading + 90, dist_from_center + (i * 15))
                u.heading = 10
                sg.add_unit(u)

            for i in range(5,8):

                u = mission.static("logistic" + str(i), dcs.statics.Cargo.Iso_container_small)
                u.position = position.point_from_heading(heading + 270, dist_from_center + (i * 15))
                u.heading = 10
                sg.add_unit(u)

            a_pos = position.point_from_heading(heading + 180, dist_from_center)

            u = mission.static("Ammo Dump", dcs.statics.Fortification.FARP_Ammo_Dump_Coating)
            u.position = a_pos.point_from_heading(heading + 90, 1)
            u.heading = heading
            sg.add_unit(u)

            u = mission.static("FARP Tent", dcs.statics.Fortification.FARP_Tent)
            u.position = a_pos.point_from_heading(heading + 90, dist_from_center + 20)
            u.heading = heading
            sg.add_unit(u)

            u = mission.static("Fuel Depot", dcs.statics.Fortification.FARP_Fuel_Depot)
            u.position = a_pos.point_from_heading(heading + 90, dist_from_center + 40)
            u.heading = heading
            sg.add_unit(u)

            return sg



        @staticmethod
        def sa6_site(mission, country, position, heading, prefix="", skill=unit.Skill.Average):
            vg = mission.vehicle_group(
                country,
                prefix + "SA6 site",
                dcs.vehicles.AirDefence.Kub_1S91_str,
                position,
                heading
            )

            u = mission.vehicle("Launcher 1", dcs.vehicles.AirDefence.Kub_2P25_ln)
            u.position = position.point_from_heading(heading + 140, 30)
            u.heading = heading
            vg.add_unit(u)

            u = mission.vehicle("Launcher 2", dcs.vehicles.AirDefence.Kub_2P25_ln)
            u.position = position.point_from_heading(heading + 210, 30)
            u.heading = heading
            vg.add_unit(u)

            u = mission.vehicle("Rearm Truck", dcs.vehicles.Unarmed.Ural_375)
            u.position = position.point_from_heading(heading + 0, 40)
            u.heading = heading
            vg.add_unit(u)

            for u in vg.units:
                u.skill = skill

            return vg
