mix.exs

defmodule Hibana.Plugins.MixProject do
  use Mix.Project

  @version "0.1.0"
  @source_url "https://github.com/greentornado/hibana"

  def project do
    base = [
      app: :hibana_plugins,
      version: @version,
      elixir: "~> 1.16",
      start_permanent: Mix.env() == :prod,
      deps: deps(),
      description: description(),
      package: package(),
      docs: docs(),
      name: "Hibana Plugins",
      source_url: @source_url
    ]

    if System.get_env("HEX_PUBLISH") do
      base
    else
      Keyword.merge(base,
        build_path: "../../_build",
        config_path: "../../config/config.exs",
        deps_path: "../../deps",
        lockfile: "../../mix.lock"
      )
    end
  end

  def application do
    [
      extra_applications: [:logger]
    ]
  end

  defp description do
    "35 built-in plugins for the Hibana web framework: " <>
      "JWT, OAuth, CORS, rate limiting, GraphQL, admin dashboard, i18n, and more."
  end

  defp package do
    [
      name: "hibana_plugins",
      licenses: ["MIT"],
      links: %{"GitHub" => @source_url},
      files: ~w(lib .formatter.exs mix.exs LICENSE)
    ]
  end

  defp docs do
    [
      main: "Hibana.Plugins.JWT",
      source_ref: "v#{@version}",
      source_url: @source_url,
      groups_for_modules: [
        "Security & Auth": [
          Hibana.Plugins.JWT,
          Hibana.Plugins.OAuth,
          Hibana.Plugins.Auth,
          Hibana.Plugins.APIKey,
          Hibana.Plugins.TOTP,
          Hibana.Plugins.RequestSigning,
          Hibana.Plugins.CORS,
          Hibana.Plugins.ScopedCORS,
          Hibana.Plugins.RateLimiter,
          Hibana.Plugins.DistributedRateLimiter
        ],
        "Request Processing": [
          Hibana.Plugins.BodyParser,
          Hibana.Plugins.Session,
          Hibana.Plugins.RequestId,
          Hibana.Plugins.Compression,
          Hibana.Plugins.ContentNegotiation,
          Hibana.Plugins.APIVersioning,
          Hibana.Plugins.I18n
        ],
        "Monitoring & Ops": [
          Hibana.Plugins.Logger,
          Hibana.Plugins.ColorLogger,
          Hibana.Plugins.Metrics,
          Hibana.Plugins.HealthCheck,
          Hibana.Plugins.GracefulShutdown,
          Hibana.Plugins.TelemetryDashboard,
          Hibana.Plugins.LiveDashboard
        ],
        "Data & Content": [
          Hibana.Plugins.Cache,
          Hibana.Plugins.OTPCache,
          Hibana.Plugins.Static,
          Hibana.Plugins.Upload,
          Hibana.Plugins.GraphQL,
          Hibana.Plugins.Search,
          Hibana.Plugins.SEO
        ],
        "Development & Admin": [
          Hibana.Plugins.ErrorHandler,
          Hibana.Plugins.DevErrorPage,
          Hibana.Plugins.Admin,
          Hibana.Plugins.LiveViewChannel
        ]
      ]
    ]
  end

  defp deps do
    [
      hibana_dep(),
      {:plug, "~> 1.16"},
      {:jose, "~> 1.11"},
      {:hackney, "~> 3.2"},
      {:jason, "~> 1.4"},
      {:telemetry, "~> 1.3"},
      {:cowboy, "~> 2.14"},
      {:plug_cowboy, "~> 2.7"},
      {:mime, "~> 2.0"},
      {:ex_doc, "~> 0.34", only: :dev, runtime: false}
    ]
  end

  defp hibana_dep do
    if System.get_env("HEX_PUBLISH") do
      {:hibana, "~> #{@version}"}
    else
      {:hibana, in_umbrella: true}
    end
  end
end