import { beforeEach, describe, expect, it, vi } from "vitest";

const httpClientMock = vi.hoisted(() => vi.fn());

vi.mock("../http_client", () => ({
  httpClient: httpClientMock,
}));

import { PaymentApi } from "../payment_api";

describe("PaymentApi", () => {
  beforeEach(() => {
    httpClientMock.mockReset();
  });

  it("loads public coffee tip plans from the dedicated endpoint", async () => {
    httpClientMock.mockResolvedValue({
      success: true,
      data: {
        plans: [
          {
            planId: "tip_coffee_usd_19_99",
            planName: "Large Coffee",
            orderType: "tip",
            tipType: "coffee_large",
            description: "Buy Elio a large coffee",
            amountCents: 1999,
            currency: "USD",
            autoRenew: false,
            isFirstRechargeOffer: false,
            firstRechargeDiscountPercent: 0,
          },
        ],
      },
    });

    const response = await new PaymentApi().getTipPlans();

    expect(httpClientMock).toHaveBeenCalledWith("/api/payment/tip-plans");
    expect(response.toJson()).toEqual({
      plans: [
        {
          planId: "tip_coffee_usd_19_99",
          planName: "Large Coffee",
          amountCents: 1999,
          currency: "USD",
        },
      ],
    });
  });
});
