#!/usr/bin/python
# -*- coding: utf-8 -*-

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

# TODO: write ansible sections

DOCUMENTATION = r"""
"""

EXAMPLES = r"""
"""

RETURN = r"""
"""

from __future__ import annotations  # pyright: ignore[reportGeneralTypeIssues]

import copy

from ansible.module_utils.basic import AnsibleModule
from ansible_collections.snailed.ez_compose.plugins.module_utils.common import (
    State,
    exit,
    get_state,
    remove_service,
    update_project,
    update_service,
)


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 update_service(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)

    if module.params["state"] == "absent":
        state = remove_service(state)

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

    exit(state)


if __name__ == "__main__":
    main()