src/lightspeed@integration@jobs.erl

-module(lightspeed@integration@jobs).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/lightspeed/integration/jobs.gleam").
-export([critical_path_pattern/0, mixed_runtime_pattern/0, local_dev_pattern/0, valid/1, backend_label/1, signature/1, backend/1, name/1]).
-export_type([queue_backend/0, retry_policy/0, pattern/0]).

-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.

?MODULEDOC(" Background-job integration patterns for ecosystem compatibility (M26).\n").

-type queue_backend() :: {gleam_worker_pool, integer()} |
    {oban_bridge, binary()} |
    {mixed_queue, binary(), binary()}.

-type retry_policy() :: {retry_policy, integer(), integer(), integer()}.

-type pattern() :: {pattern,
        binary(),
        queue_backend(),
        retry_policy(),
        boolean(),
        boolean()}.

-file("src/lightspeed/integration/jobs.gleam", 29).
?DOC(" Critical-path integration pattern.\n").
-spec critical_path_pattern() -> pattern().
critical_path_pattern() ->
    {pattern,
        <<"critical_path_jobs"/utf8>>,
        {oban_bridge, <<"MyApp.Workers"/utf8>>},
        {retry_policy, 10, 250, 15000},
        true,
        true}.

-file("src/lightspeed/integration/jobs.gleam", 44).
?DOC(" Mixed-runtime integration pattern.\n").
-spec mixed_runtime_pattern() -> pattern().
mixed_runtime_pattern() ->
    {pattern,
        <<"mixed_runtime_jobs"/utf8>>,
        {mixed_queue, <<"Oban"/utf8>>, <<"GleamWorkers"/utf8>>},
        {retry_policy, 6, 500, 20000},
        true,
        true}.

-file("src/lightspeed/integration/jobs.gleam", 59).
?DOC(" Local development integration pattern.\n").
-spec local_dev_pattern() -> pattern().
local_dev_pattern() ->
    {pattern,
        <<"local_dev_jobs"/utf8>>,
        {gleam_worker_pool, 4},
        {retry_policy, 3, 100, 5000},
        true,
        true}.

-file("src/lightspeed/integration/jobs.gleam", 128).
-spec retry_policy_valid(retry_policy()) -> boolean().
retry_policy_valid(Policy) ->
    ((erlang:element(2, Policy) > 0) andalso (erlang:element(3, Policy) > 0))
    andalso (erlang:element(4, Policy) > 0).

-file("src/lightspeed/integration/jobs.gleam", 120).
-spec backend_valid(queue_backend()) -> boolean().
backend_valid(Backend) ->
    case Backend of
        {gleam_worker_pool, Pool_size} ->
            Pool_size > 0;

        {oban_bridge, Module} ->
            Module /= <<""/utf8>>;

        {mixed_queue, Primary, Fallback} ->
            (Primary /= <<""/utf8>>) andalso (Fallback /= <<""/utf8>>)
    end.

-file("src/lightspeed/integration/jobs.gleam", 74).
?DOC(" Validate job integration constraints.\n").
-spec valid(pattern()) -> boolean().
valid(Pattern) ->
    ((backend_valid(erlang:element(3, Pattern)) andalso retry_policy_valid(
        erlang:element(4, Pattern)
    ))
    andalso erlang:element(5, Pattern))
    andalso erlang:element(6, Pattern).

-file("src/lightspeed/integration/jobs.gleam", 82).
?DOC(" Stable backend label.\n").
-spec backend_label(queue_backend()) -> binary().
backend_label(Backend) ->
    case Backend of
        {gleam_worker_pool, Pool_size} ->
            <<"gleam_worker_pool:"/utf8,
                (erlang:integer_to_binary(Pool_size))/binary>>;

        {oban_bridge, Module} ->
            <<"oban_bridge:"/utf8, Module/binary>>;

        {mixed_queue, Primary, Fallback} ->
            <<<<<<"mixed_queue:"/utf8, Primary/binary>>/binary, ":"/utf8>>/binary,
                Fallback/binary>>
    end.

-file("src/lightspeed/integration/jobs.gleam", 132).
-spec bool_label(boolean()) -> binary().
bool_label(Value) ->
    case Value of
        true ->
            <<"true"/utf8>>;

        false ->
            <<"false"/utf8>>
    end.

-file("src/lightspeed/integration/jobs.gleam", 93).
?DOC(" Stable pattern signature.\n").
-spec signature(pattern()) -> binary().
signature(Pattern) ->
    <<<<<<<<<<<<<<<<<<<<<<<<<<"jobs:"/utf8,
                                                        (erlang:element(
                                                            2,
                                                            Pattern
                                                        ))/binary>>/binary,
                                                    "|backend="/utf8>>/binary,
                                                (backend_label(
                                                    erlang:element(3, Pattern)
                                                ))/binary>>/binary,
                                            "|max_attempts="/utf8>>/binary,
                                        (erlang:integer_to_binary(
                                            erlang:element(
                                                2,
                                                erlang:element(4, Pattern)
                                            )
                                        ))/binary>>/binary,
                                    "|base_backoff_ms="/utf8>>/binary,
                                (erlang:integer_to_binary(
                                    erlang:element(
                                        3,
                                        erlang:element(4, Pattern)
                                    )
                                ))/binary>>/binary,
                            "|timeout_ms="/utf8>>/binary,
                        (erlang:integer_to_binary(
                            erlang:element(4, erlang:element(4, Pattern))
                        ))/binary>>/binary,
                    "|tenant_partitioned="/utf8>>/binary,
                (bool_label(erlang:element(5, Pattern)))/binary>>/binary,
            "|dead_letter_enabled="/utf8>>/binary,
        (bool_label(erlang:element(6, Pattern)))/binary>>.

-file("src/lightspeed/integration/jobs.gleam", 111).
?DOC(" Pattern backend.\n").
-spec backend(pattern()) -> queue_backend().
backend(Pattern) ->
    erlang:element(3, Pattern).

-file("src/lightspeed/integration/jobs.gleam", 116).
?DOC(" Pattern name.\n").
-spec name(pattern()) -> binary().
name(Pattern) ->
    erlang:element(2, Pattern).