// Imports
// =================================
import { expect, test } from "vitest";
import iyzico from "..";
import { config } from "dotenv";

// Config
// =================================
config();

// Test
// =================================
/**
 * @dev EN: Health check
 * @dev TR: Sağlık kontrolü
 */
test.skip("binCheck`", async () => {
  // Setup
  const client = iyzico({
    apiKey: `${process.env.IYZICO_API_KEY}`,
    secretKey: `${process.env.IYZICO_SECRET_KEY}`,
  });

  // Init
  const response = await client.payment.binCheck({
    binNumber: '454360',
  });

  // Tests
  expect(response).toBeDefined();
  const keys = Object.keys(response);
  expect(keys.includes('binNumber')).toBe(true);
  expect(keys.includes('cardType')).toBe(true);
  expect(keys.includes('cardAssociation')).toBe(true);
  expect(keys.includes('cardFamily')).toBe(true);
  expect(keys.includes('bankName')).toBe(true);
  expect(keys.includes('bankCode')).toBe(true);
  expect(keys.includes('commercial')).toBe(true);
  expect(keys.includes('status')).toBe(true);
  expect(keys.includes('locale')).toBe(true);
  expect(keys.includes('systemTime')).toBe(true);
  expect(response?.binNumber).toBe('454360');
  expect(response?.cardType).toBe('CREDIT_CARD');
  expect(response?.cardAssociation).toBe('VISA');
  expect(response?.cardFamily).toBe('Maximum');
  expect(response?.bankName).toBe('İş Bankası');
  expect(response?.bankCode).toBe(64);
  expect(response?.commercial).toBe(0);
  expect(response?.status).toBe('success');
  expect(response?.locale).toBe('tr');
  expect(typeof response?.systemTime).toBe('number');
});

/**
 * 
 */
test.skip("bkm", async () => {
  // Setup
  const client = iyzico({
    apiKey: `${process.env.IYZICO_API_KEY}`,
    secretKey: `${process.env.IYZICO_SECRET_KEY}`,
  });

  // Init
  // const response = await client

  // Tests
  // expect(response).toBeDefined();
});

/**
 * 
 */
test("3dsecure - create", async () => {
  // Setup
  const client = iyzico({
    apiKey: `${process.env.IYZICO_API_KEY}`,
    secretKey: `${process.env.IYZICO_SECRET_KEY}`,
  });

  // Init
  const response = await client.payment.threeDSecure.create({
    locale: "tr",
    conversationId: "123456789",
    price: "1.0",
    paidPrice: "1.2",
    installment: 1,
    paymentChannel: "WEB",
    basketId: "B67832",
    paymentGroup: "PRODUCT",
    paymentCard: {
        cardHolderName: "John Doe",
        cardNumber: "5528790000000008",
        expireYear: "2030",
        expireMonth: "12",
        cvc: "123"
    },
    buyer: {
        id: "BY789",
        name: "John",
        surname: "Doe",
        identityNumber: "74300864791",
        email: "email@email.com",
        gsmNumber: "+905350000000",
        registrationDate: "2013-04-21 15:12:09",
        lastLoginDate: "2015-10-05 12:43:35",
        registrationAddress: "Nidakule Göztepe, Merdivenköy Mah. Bora Sok. No:1",
        city: "Istanbul",
        country: "Turkey",
        zipCode: "34732",
        ip: "85.34.78.112"
    },
    shippingAddress: {
        address: "Nidakule Göztepe, Merdivenköy Mah. Bora Sok. No:1",
        zipCode: "34742",
        contactName: "Jane Doe",
        city: "Istanbul",
        country: "Turkey"
    },
    billingAddress: {
        address: "Nidakule Göztepe, Merdivenköy Mah. Bora Sok. No:1",
        zipCode: "34742",
        contactName: "Jane Doe",
        city: "Istanbul",
        country: "Turkey"
    },
    basketItems: [
        {
            id: "BI101",
            price: "0.3",
            name: "Binocular",
            category1: "Collectibles",
            category2: "Accessories",
            itemType: "PHYSICAL"
        },
        {
            id: "BI102",
            price: "0.5",
            name: "Game code",
            category1: "Game",
            category2: "Online Game Items",
            itemType: "VIRTUAL"
        },
        {
            id: "BI103",
            price: "0.2",
            name: "Usb",
            category1: "Electronics",
            category2: "Usb / Cable",
            itemType: "PHYSICAL"
        }
    ],
    currency: "TRY",
    callbackUrl: "https://www.merchant.com/callback"
  });

  console.log(response);

  // Tests
  expect(response).toBeDefined();
  const keys = Object.keys(response);
  expect(keys.includes('status')).toBe(true);
  expect(keys.includes('locale')).toBe(true);
  expect(keys.includes('systemTime')).toBe(true);
  expect(keys.includes('conversationId')).toBe(true);
  expect(keys.includes('threeDSHtmlContent')).toBe(true);
  expect(response?.status).toBe('success');
  expect(response?.locale).toBe('tr');
  expect(typeof response?.systemTime).toBe('number');
  expect(response?.conversationId).toBe('123456789');
  expect(typeof response?.threeDSHtmlContent).toBe('string');
});