{erl_opts, [
    debug_info,
    warn_export_vars,
    warn_unused_vars,
    warn_unused_import
]}.

{deps, [
    %% Telemetry for observability
    {telemetry, "1.3.0"}
]}.

%% NOTE: evoq defines its own types in include/evoq_types.hrl
%% Adapters (like reckon_evoq) translate between evoq types and
%% their backend-specific types (like reckon_gater types).

%% NOTE: evoq does NOT depend on any specific adapter (like reckon-evoq).
%% Applications using evoq must add their chosen adapter as a dependency
%% and configure it via application env:
%%
%% {evoq, [
%%     {event_store_adapter, evoq_esdb_gater_adapter}
%% ]}
%%
%% For local development, use _checkouts with symlinks:
%%   mkdir -p _checkouts
%%   ln -s /path/to/reckon-gater _checkouts/reckon_gater

{profiles, [
    {test, [
        {deps, [
            {proper, "1.4.0"},
            {meck, "0.9.2"}
        ]},
        {erl_opts, [nowarn_export_all]},
        {extra_src_dirs, ["test/unit"]}
    ]}
]}.

%% EUnit options - only run specific unit test modules
%% Note: Integration tests (SUITE modules) are run via CT, not eunit
{eunit_opts, [verbose]}.
{eunit_tests, [{module, evoq_aggregate_tests}]}.

%% Common Test options
{ct_opts, [
    {dir, "test/integration"}
]}.

{project_plugins, [
    rebar3_hex,
    rebar3_ex_doc,
    rebar3_proper
]}.

%% Ex_doc configuration for hex.pm documentation
{ex_doc, [
    {extras, [
        {"README.md", #{title => <<"Overview">>}},
        {"guides/architecture.md", #{title => <<"Architecture">>}},
        {"guides/aggregates.md", #{title => <<"Aggregates">>}},
        {"guides/event_handlers.md", #{title => <<"Event Handlers">>}},
        {"guides/process_managers.md", #{title => <<"Process Managers">>}},
        {"guides/projections.md", #{title => <<"Projections">>}},
        {"guides/adapters.md", #{title => <<"Adapters">>}},
        {"CHANGELOG.md", #{title => <<"Changelog">>}},
        {"LICENSE", #{title => <<"License">>}}
    ]},
    {main, <<"README.md">>},
    {source_url, <<"https://github.com/reckon-db-org/evoq">>},
    {assets, #{<<"assets">> => <<"assets">>}}
]}.

{hex, [{doc, #{provider => ex_doc}}]}.

{cover_enabled, true}.
{cover_opts, [verbose]}.

{dialyzer, [
    {warnings, [
        unmatched_returns,
        error_handling,
        underspecs
    ]},
    {plt_apps, top_level_deps}
]}.

{shell, [
    {apps, [evoq]}
]}.
