"""Macros for Bun-backed Wails applications."""

load("//wails:defs.bzl", "wails_build_assets", "wails_generate_bindings", "wails_run")
load(":private/dev_session.bzl", "wails_bun_dev_session")
load(":private/frontend_dist.bzl", "wails_bun_frontend_dev", "wails_bun_frontend_dist")

def wails_bun_app(
        name,
        app_binary,
        frontend_srcs,
        package_json,
        node_modules,
        build_asset_srcs,
        app_name,
        binary_name,
        icon = None,
        bindings_package_dir = ".",
        frontend_strip_prefix = "",
        build_strip_prefix = "",
        visibility = None):
    wails_bun_frontend_dist(
        name = name + "_frontend_dist",
        srcs = frontend_srcs,
        node_modules = node_modules,
        package_json = package_json,
        strip_prefix = frontend_strip_prefix,
        visibility = visibility,
    )

    wails_build_assets(
        name = name + "_build_assets",
        srcs = build_asset_srcs,
        app_name = app_name,
        binary_name = binary_name,
        strip_prefix = build_strip_prefix,
        visibility = visibility,
    )

    wails_generate_bindings(
        name = name + "_bindings",
        out_dir = "frontend/src/lib/bindings",
        package_dir = bindings_package_dir,
        visibility = visibility,
    )

    wails_bun_frontend_dev(
        name = name + "_frontend_dev",
        data = frontend_srcs,
        node_modules = node_modules,
        package_json = package_json,
        visibility = visibility,
    )

    wails_run(
        name = name + "_run",
        binary = app_binary,
        build_assets = name + "_build_assets",
        icon = icon,
        visibility = visibility,
    )

    wails_bun_dev_session(
        name = name + "_dev",
        workspace_dir = native.package_name() or ".",
        frontend_dev = name + "_frontend_dev",
        app_binary = app_binary,
        build_assets = name + "_build_assets",
        bindings_target = name + "_bindings",
        icon = icon,
        visibility = visibility,
    )
