// Offer gövdesi sözleşme testi — background.js'teki buildOfferBody ile birebir aynı
// payload'ı, kullanıcının yakaladığı gerçek POST /api/boostingOffers gövdesiyle karşılaştırır.
//   node tools/test-offer.js
const assert = require("assert");
const { compute } = require("../pricing.js");

// background.js -> buildOfferBody ile AYNI tutulmalı.
function buildOfferBody(detailsId, priceUSD, deliveryTime) {
  return {
    details: {
      boostingRequestId: detailsId,
      guaranteedDeliveryTime: deliveryTime || "Day28",
      pricing: {
        quantity: 1,
        minQuantity: 1,
        volumeDiscounts: null,
        pricePerUnit: { amount: priceUSD, currency: "USD" },
      },
    },
  };
}

// Kullanıcının yakaladığı gerçek istek gövdesi (Rank Boost, $400, Day28)
const captured = {
  details: {
    boostingRequestId: "f44434ec-c20c-4950-9986-80227c538ab4",
    guaranteedDeliveryTime: "Day28",
    pricing: {
      quantity: 1,
      minQuantity: 1,
      volumeDiscounts: null,
      pricePerUnit: { amount: 400, currency: "USD" },
    },
  },
};

const built = buildOfferBody("f44434ec-c20c-4950-9986-80227c538ab4", 400, "Day28");
assert.deepStrictEqual(built, captured, "offer gövdesi yakalanan payload ile aynı olmalı");

// Fiyat motoru, offer için kullanılabilir bir USD değeri üretmeli (Rank Boost).
const pr = compute(
  { categoryId: "5", currentRank: "Gold IV", targetRank: "Platinum I", region: "Europe West" },
  {}
);
assert.ok(pr.final != null && pr.final > 0, "rank boost fiyatı hesaplanmalı");
assert.strictEqual(typeof pr.final, "number");

// Custom (4) ve fiyatsız durumlar offer üretmemeli (compute null döner).
const custom = compute({ categoryId: "4", region: "Europe West" }, {});
assert.strictEqual(custom.final, null, "custom request fiyatlandırılamaz");

console.log("✓ Offer gövdesi yakalanan payload ile birebir aynı; fiyat entegrasyonu tutuyor. ($" + pr.final + ")");
