defmodule BerrypodWeb.WebhookController do
  use BerrypodWeb, :controller

  alias Berrypod.Webhooks

  require Logger

  @doc """
  Receives Printify webhook events.

  Events:
  - product:publish:started - Product publish initiated
  - product:updated - Product was modified
  - product:deleted - Product was deleted
  - shop:disconnected - Shop was disconnected
  """
  def printify(conn, params) do
    event_type = params["type"] || params["event"]
    resource = params["resource"] || params["data"] || %{}

    Logger.info("Received Printify webhook: #{event_type}")

    case Webhooks.handle_printify_event(event_type, resource) do
      :ok ->
        json(conn, %{status: "ok"})

      {:ok, _} ->
        json(conn, %{status: "ok"})

      {:error, reason} ->
        Logger.warning("Webhook handling failed: #{inspect(reason)}")
        # Still return 200 to prevent Printify retrying
        json(conn, %{status: "ok"})
    end
  end

  @doc """
  Receives Printful webhook events.

  Events:
  - package_shipped - Package has been shipped
  - order_failed - Order processing failed
  - order_canceled - Order was canceled
  - product_updated - Sync product was updated
  - product_deleted - Sync product was deleted
  """
  def printful(conn, params) do
    event_type = params["type"]
    data = params["data"] || %{}

    Logger.info("Received Printful webhook: #{event_type}")

    case Webhooks.handle_printful_event(event_type, data) do
      :ok ->
        json(conn, %{status: "ok"})

      {:ok, _} ->
        json(conn, %{status: "ok"})

      {:error, reason} ->
        Logger.warning("Printful webhook handling failed: #{inspect(reason)}")
        # Return 200 to prevent Printful retrying
        json(conn, %{status: "ok"})
    end
  end
end
