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

from __future__ import annotations

from typing import TYPE_CHECKING, Any, Callable

from ansible_collections.snailed.ez_compose.plugins.module_utils.common import (
    clean_none,
    recursive_update,
)

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


BASE_ARGS: dict[str, Any] = {}


def apply_update(
    service: dict[str, Any],
    update: dict[str, Any],
) -> dict[str, Any]:
    return recursive_update(service, update)


def get_default_args(state: State, helper_name: str) -> dict[str, Any]:
    settings: dict[str, Any] = state.module.params.get("settings") or {}
    label_default_args: dict[str, Any] = settings.get("label_default_args") or {}
    default_args: dict[str, Any] = label_default_args.get(helper_name) or {}
    return clean_none(default_args)


def run_helper(
    state: State,
    service_name: str,
    service: dict[str, Any],
    params: dict[str, Any],
    helper: Callable[[State, str, dict[str, Any]], dict[str, Any]] = lambda _a, _b, _c: {},
) -> dict[str, Any]:
    update = helper(state, service_name, params)
    return apply_update(service, update)