# Pleroma: A lightweight social networking server
# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only

defmodule Pleroma.Web.ApiSpec.Schemas.PushSubscription do
  alias OpenApiSpex.Schema

  require OpenApiSpex

  OpenApiSpex.schema(%{
    title: "PushSubscription",
    description: "Response schema for a push subscription",
    type: :object,
    properties: %{
      id: %Schema{
        anyOf: [%Schema{type: :string}, %Schema{type: :integer}],
        description: "The id of the push subscription in the database."
      },
      endpoint: %Schema{type: :string, description: "Where push alerts will be sent to."},
      server_key: %Schema{type: :string, description: "The streaming server's VAPID key."},
      alerts: %Schema{
        type: :object,
        description: "Which alerts should be delivered to the endpoint.",
        properties: %{
          follow: %Schema{
            type: :boolean,
            description: "Receive a push notification when someone has followed you?"
          },
          favourite: %Schema{
            type: :boolean,
            description:
              "Receive a push notification when a status you created has been favourited by someone else?"
          },
          reblog: %Schema{
            type: :boolean,
            description:
              "Receive a push notification when a status you created has been boosted by someone else?"
          },
          mention: %Schema{
            type: :boolean,
            description:
              "Receive a push notification when someone else has mentioned you in a status?"
          },
          poll: %Schema{
            type: :boolean,
            description:
              "Receive a push notification when a poll you voted in or created has ended? "
          }
        }
      }
    },
    example: %{
      "id" => "328_183",
      "endpoint" => "https://yourdomain.example/listener",
      "alerts" => %{
        "follow" => true,
        "favourite" => true,
        "reblog" => true,
        "mention" => true,
        "poll" => true
      },
      "server_key" =>
        "BCk-QqERU0q-CfYZjcuB6lnyyOYfJ2AifKqfeGIm7Z-HiTU5T9eTG5GxVA0_OH5mMlI4UkkDTpaZwozy0TzdZ2M="
    }
  })
end
