{erl_opts, [
    debug_info,
    warn_unused_vars,
    warnings_as_errors,
    warn_export_all,
    warn_shadow_vars,
    warn_unused_import,
    warn_unused_function,
    warn_bif_clash,
    warn_unused_record,
    warn_deprecated_function,
    warn_obsolete_guard,
    strict_validation,
    warn_export_vars,
    warn_exported_vars,
    warn_missing_spec
    % warn_untyped_record
    % warn_missing_doc
]}.

{minimum_otp_vsn, "27"}.

{project_plugins, [
    {rebar3_depup, "~> 0.4"},
    {rebar3_hex, "~> 7.0"},
    {rebar3_ex_doc, "~> 0.2"},
    {rebar3_lint, "~> 4.1"},
    {erlfmt, "~> 1.7"},
    {covertool, "~> 2.0"}
]}.

{deps, [
    {ranch, "~> 2.0"},
    {cowboy, "~> 2.0"},
    {dns_erlang, "~> 4.3"},
    {telemetry, "~> 1.3"},
    {segmented_cache, "~> 0.6"},
    {worker_pool, "~> 6.5"},
    {recon, "~> 2.5"}
]}.

{dist_node, [
    {setcookie, 'erldns-cookie'},
    {sname, erldns}
]}.

{overrides, [
    {override, cowboy, [{deps, [{cowlib, "~> 2.0"}]}]}
]}.

{profiles, [
    {test, [
        {deps, [
            {proper, "1.5.0"},
            {meck, "1.0.0"},
            {dnstest, ".*",
                {git, "https://github.com/dnsimple/dnstest",
                    {ref, "5f1d8a59b1c62860b8be27252dcfc00401dd5b56"}}}
        ]},
        {erl_opts, [nowarn_export_all, nowarn_missing_spec, nowarn_missing_doc]},
        {eunit_opts, [verbose]},
        {covertool, [{coverdata_files, ["eunit.coverdata", "ct.coverdata"]}]},
        {cover_opts, [verbose, {min_coverage, 82}]},
        {cover_enabled, true},
        {cover_export_enabled, true}
    ]}
]}.

{depup, [{only, minor}]}.

{shell, [{apps, [erldns]}, {config, "erldns.config"}]}.

{relx, [
    {release, {erldns, git}, [erldns]},
    {dev_mode, true},
    {include_erts, false},
    {sys_config, "erldns.config"},
    {overlay, [
        {copy, "priv/zones/", "priv/zones"}
    ]},
    {extended_start_script, true}
]}.

{dialyzer, [
    {warnings, [
        no_unknown
    ]},
    {plt_extra_apps, [cowboy, ranch]}
]}.

{xref_checks, [
    locals_not_used,
    undefined_functions,
    undefined_function_calls,
    {deprecated_function_calls, next_major_release},
    {deprecated_functions, next_major_release}
]}.

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

{ex_doc, [
    {source_url, <<"https://github.com/dnsimple/erldns">>},
    {groups_for_modules, [
        {<<"Packet pipeline">>, [
            erldns_pipeline,
            erldns_questions,
            erldns_edns_max_payload_size,
            erldns_query_throttle,
            erldns_packet_cache,
            erldns_resolver_recursive,
            erldns_resolver,
            erldns_dnssec,
            erldns_sorter,
            erldns_section_counter,
            erldns_axfr,
            erldns_empty_verification
        ]},
        {<<"Zones">>, [
            erldns_zones,
            erldns_zone_codec,
            erldns_zone_cache,
            erldns_zone_loader
        ]},
        {<<"Listeners">>, [
            erldns_listeners
        ]}
    ]},
    {main, <<"readme">>},
    {extras, [
        <<"README.md">>,
        <<"priv/zones/ZONES.md">>,
        <<"DESIGN.md">>,
        <<"CONTRIBUTING.md">>,
        <<"BENCHMARKING.md">>,
        <<"CHANGELOG.md">>,
        <<"LICENSE.md">>
    ]}
]}.

{erlfmt, [
    write,
    {files, [
        "{src,test,include}/**/*.{hrl,erl,app.src}",
        "erldns.example.config",
        "rebar.config"
    ]}
]}.

{elvis, [
    #{
        dirs => ["src/**"],
        filter => "*.erl",
        rules => [
            {elvis_style, export_used_types, #{ignore => [erldns_resolver]}},
            {elvis_style, max_module_length, #{ignore => [erldns_resolver, erldns_zone_cache]}},
            {elvis_style, god_modules, #{limit => 30}},
            {elvis_style, dont_repeat_yourself, disable},
            {elvis_style, max_function_length, disable},
            {elvis_style, max_function_clause_length, disable},
            {elvis_style, no_common_caveats_call, #{ignore => [{erldns_proto_udp_sup, name, 2}]}},
            {elvis_style, no_macros, disable},
            {elvis_style, state_record_and_type, disable},
            {elvis_style, private_data_types, disable}
        ],
        ruleset => erl_files_strict
    },
    #{
        dirs => ["include"],
        filter => "*.hrl",
        ruleset => hrl_files
    },
    #{
        dirs => ["."],
        filter => "rebar.config",
        ruleset => rebar_config
    }
]}.
