# Copyright: (c) 2024, Luca Bilke <luca@bil.ke>
# MIT License (see LICENSE)

from __future__ import annotations

import copy
from typing import TYPE_CHECKING

from ansible.module_utils.basic import AnsibleModule
from ansible_collections.snailed.ez_compose.plugins.module_utils.common import (
    finish,
    get_state,
    update_project,
)
from ansible_collections.snailed.ez_compose.plugins.module_utils.service import common as service

if TYPE_CHECKING:
    from ansible_collections.snailed.ez_compose.plugins.module_utils.common import State

def helper(state: State) -> State:
    project_name = state.module.params["project_name"]
    definition = state.module.params["definition"]
    internal_network = state.module.params.get("internal_network", False)

    update = copy.deepcopy(definition)

    networks = update.get("networks", {})

    if internal_network:
        networks[f"{project_name}_internal"] = None

    update["networks"] = networks

    return service.update(state, update)


def main():
    module = AnsibleModule(
        argument_spec={
            "project_name": {
                "type": "str",
                "required": True,
            },
            "name": {
                "type": "str",
                "required": True,
            },
            "internal_network": {
                "type": "bool",
            },
            "state": {
                "type": "str",
                "default": "present",
                "choices": ["present", "absent"],
            },
            "definition": {
                "type": "dict",
                "required": True,
            },
        },
        supports_check_mode=True,
    )

    state = get_state(module)

    for f in [helper, update_project]:
        state = f(state)

    finish(state)


if __name__ == "__main__":
    main()