-- Copyright (C) 2022  veden

-- This program is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation, either version 3 of the License, or
-- (at your option) any later version.

-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- GNU General Public License for more details.

-- You should have received a copy of the GNU General Public License
-- along with this program.  If not, see <https://www.gnu.org/licenses/>.



-- imports

local thiefUtils = require("utils/ThiefUtils")
local constants = require("libs/Constants")

-- constants

local energyThief = {}

-- imported functions

local TIERS = constants.TIERS

local makeDrainCrystal = thiefUtils.makeDrainCrystal

function energyThief.addFactionAddon()

    data:extend({
            {
                type = "simple-entity-with-force",
                name = "drain-trigger-rampant",
                render_layer = "object",
                icon = "__base__/graphics/icons/steel-chest.png",
                icon_size = 32,
                flags = {"placeable-neutral", "player-creation"},
                order = "s-e-w-f",
                minable = {mining_time = 1, result = "drain-trigger-rampant"},
                max_health = 100,
                selectable_in_game = false,
                corpse = nil,
                collision_box = {{-0.35, -0.35}, {0.35, 0.35}},
                selection_box = {{-0.5, -0.5}, {0.5, 0.5}},
                picture =
                    {
                        filename = "__core__/graphics/empty.png",
                        priority = "extra-high",
                        width = 1,
                        height = 1,
                        shift = {0, 0}
                    }
            },

            {
                type = "item",
                name = "drain-trigger-rampant",
                icon = "__Rampant__/graphics/icons/thief/crystal-drain.png",
                icon_size = 32,
                icon_mipmaps = 1,
                flags = {"hidden"},
                subgroup = "energy",
                order = "e[accumulator]-a[accumulator]",
                place_result = "drain-trigger-rampant",
                stack_size = 50
            },

            {
                type = "item",
                name = "crystal-drain-pole-rampant",
                icon = "__Rampant__/graphics/icons/thief/crystal-drain.png",
                icon_size = 32,
                icon_mipmaps = 1,
                flags = {"hidden"},
                subgroup = "energy",
                order = "e[accumulator]-a[accumulator]",
                place_result = "crystal-drain-pole-rampant",
                stack_size = 50
            },

            {
                type = "electric-pole",
                name = "crystal-drain-pole-rampant",
                icon = "__Rampant__/graphics/icons/thief/crystal-drain.png",
                icon_size = 32,
                icon_mipmaps = 1,
                flags = {"hidden"},
                selectable_in_game = false,
                minable = {hardness = 0.2, mining_time = 0.5, result = "big-electric-pole"},
                max_health = 750,
                healing_per_tick = 0.02,
                corpse = nil,
                resistances =
                    {
                        {
                            type = "physical",
                            percent = 25
                        },
                        {
                            type = "fire",
                            percent = 85
                        },
                        {
                            type = "electric",
                            percent = 95
                        },
                        {
                            type = "laser",
                            percent = 90
                        }
                    },
                collision_box = {{-0.55, -0.55}, {0.55, 0.55}},
                selection_box = {{-0.55, -0.55}, {0.55, 0.55}},
                drawing_box = {{-1, -3}, {1, 0.5}},
                maximum_wire_distance = 30,
                supply_area_distance = 9,
                vehicle_impact_sound =  { filename = "__base__/sound/car-metal-impact.ogg", volume = 0.65 },
                pictures =
                    {
                        filename = "__Rampant__/graphics/entities/thief/crystal-drain-pole.png",
                        priority = "high",
                        width = 168,
                        height = 130,
                        direction_count = 4,
                        shift = {1.6, -1.4}
                    },
                connection_points =
                    {
                        {
                            shadow =
                                {
                                    copper = {2.7, 0},
                                    green = {1.8, 0},
                                    red = {3.6, 0}
                                },
                            wire =
                                {
                                    copper = {0, -2.5},
                                    green = {-0.59375, -2.5},
                                    red = {0.625, -2.5}
                                }
                        },
                        {
                            shadow =
                                {
                                    copper = {3.1, 0.2},
                                    green = {2.3, -0.3},
                                    red = {3.8, 0.6}
                                },
                            wire =
                                {
                                    copper = {-0.0625, -2.5},
                                    green = {-0.5, -3},
                                    red = {0.34375, -2}
                                }
                        },
                        {
                            shadow =
                                {
                                    copper = {2.9, 0.06},
                                    green = {3.0, -0.6},
                                    red = {3.0, 0.8}
                                },
                            wire =
                                {
                                    copper = {-0.09375, -2.5},
                                    green = {-0.09375, -3},
                                    red = {-0.09375, -2}
                                }
                        },
                        {
                            shadow =
                                {
                                    copper = {3.1, 0.2},
                                    green = {3.8, -0.3},
                                    red = {2.35, 0.6}
                                },
                            wire =
                                {
                                    copper = {-0.0625, -2.4},
                                    green = {0.375, -2.9},
                                    red = {-0.46875, -2.4}
                                }
                        }
                    },
                radius_visualisation_picture =
                    {
                        filename = "__base__/graphics/entity/small-electric-pole/electric-pole-radius-visualization.png",
                        width = 12,
                        height = 12,
                        priority = "extra-high-no-scale"
                    }
            }
    })

    local chest = util.table.deepcopy(data.raw["radar"]["radar"])
    chest.name = "pylon-target-rampant"
    chest.icon = "__Rampant__/graphics/icons/thief/crystal-drain.png"
    chest.icon_size = 32
    chest.corpse = nil
    chest.icon_mipmaps = 1
    chest.flags = {"not-repairable", "not-on-map", "hidden"}
    chest.subgroup = "enemies"
    chest.next_upgrade = nil
    chest.backer_name = false
    chest.rotation_speed = 0
    data.raw["simple-entity-with-force"]["drain-trigger-rampant"].dying_explosion = chest.dying_explosion
    chest.pictures = {
        layers={
            {
                filename = "__Rampant__/graphics/entities/thief/crystal-drain-pole.png",
                priority = "high",
                width = 168,
                height = 130,
                direction_count = 4,
                shift = {1.6, -1.4}
            }
        }
    }
    chest.max_health = 750
    chest.resistances =
        {
            {
                type = "physical",
                percent = 25
            },
            {
                type = "fire",
                percent = 85
            },
            {
                type = "electric",
                percent = 95
            },
            {
                type = "laser",
                percent = 90
            }
        }
    chest.energy_usage = "500kW"
    -- chest.collision_mask = {}
    chest.collision_box = nil
    chest.selection_box = {{-0.55, -0.55}, {0.55, 0.55}}
    chest.minable.result = "pylon-target-rampant"
    chest.working_sound = {
        sound = {
            {
                filename = "__base__/sound/accumulator-working.ogg"
            }
        },
        apparent_volume = 2,
    }

    data:extend({
            chest,

            {
                type = "item",
                name = "pylon-target-rampant",
                icon = "__Rampant__/graphics/icons/thief/crystal-drain.png",
                icon_size = 32,
                icon_mipmaps = 1,
                flags = {"hidden"},
                subgroup = "enemies",
                order = "a[items]-h[steel-collector]",
                place_result = "pylon-target-rampant",
                stack_size = 50
            }
    })


    for i=1,TIERS do
        local drainCrystalAttributes = {
            name = "crystal-v" .. i,
            drain = i * 1.3 .. "MW",
            scale = (i * 0.1) + 0.5,
            health = 400 * i
        }

        makeDrainCrystal(drainCrystalAttributes)
    end

end

return energyThief
