var tdv_sdk = {};

// 1. DATA CONFIG (Dữ liệu nguồn)
tdv_sdk.list = [
  {
    id: "card_dog",
    name: "dog",
    image: "https://image.senaai.tech/images/dog7.png",
    audio: "https://audio.senaai.tech/audio/Sena_Voice1_dog_06d80eb0.mp3",
  },
  {
    id: "card_cat",
    name: "cat",
    image: "https://image.senaai.tech/images/Cat.png",
    audio: "https://audio.senaai.tech/audio/Sena_Voice1_cat_d077f244.mp3",
  },
  {
    id: "card_fish",
    name: "fish",
    image: "https://image.senaai.tech/images/Clownfish.png",
    audio: "https://audio.senaai.tech/audio/Sena_Voice1_fish_83e4a96a.mp3",
  },
  {
    id: "card_bird",
    name: "bird",
    image: "https://image.senaai.tech/images/Bird31.png",
    audio: "https://audio.senaai.tech/audio/Sena_Voice1_bird_abaecf8c.mp3",
  },
  {
    id: "card_mouse",
    name: "mouse",
    image: "https://image.senaai.tech/images/Gerbil3.png",
    audio: "https://audio.senaai.tech/audio/Sena_Voice1_mouse_40203abe.mp3",
  },
  {
    id: "card_cow",
    name: "cow",
    image: "https://image.senaai.tech/images/cow.png",
    audio: "https://audio.senaai.tech/audio/Sena_Voice1_cow_81566e98.mp3",
  },
];

// Cấu hình số lượng card cho từng Level (Ví dụ: Lv1=3 card, Lv2=8 card...)
tdv_sdk.pageCardConfig = [6, 6, 3, 4];

tdv_sdk.pageCurrent = 0;
tdv_sdk.currentPageList = [];
tdv_sdk.pageInfo = [];

// 2. CORE FUNCTIONS
tdv_sdk.start = function () {
  tdv_sdk.pageInfo = [];

  // Duyệt qua từng config level để sinh dữ liệu
  for (let i = 0; i < tdv_sdk.pageCardConfig.length; i++) {
    let count = tdv_sdk.pageCardConfig[i];
    let cardList = [];

    // Logic Random Kiểu A: Lấy ngẫu nhiên, cho phép lặp lại
    for (let j = 0; j < count; j++) {
      let randIndex = Math.floor(Math.random() * tdv_sdk.list.length);
      // Copy đối tượng để đảm bảo tính riêng biệt (quan trọng cho game Beat)
      let _obj = {
        ...tdv_sdk.list[randIndex], // ES6 spread operator
        x: 0,
        y: 0,
        scale: 1,
        index: j, // Lưu số thứ tự để dễ xử lý beat
      };
      cardList.push(_obj);
    }

    tdv_sdk.pageInfo.push({
      index: i,
      totalCardInpage: cardList.length,
      cardList: cardList,
    });
  }

  tdv_sdk.pageCurrent = 0;
  tdv_sdk.getPostionInPage();
};

tdv_sdk.getPostionInPage = function () {
  const _currentPage = tdv_sdk.pageInfo[tdv_sdk.pageCurrent];

  const max_width = 1200,
    max_height = 1200,
    margin_x = 80,
    margin_y = 80,
    card_width = 300,
    card_height = 300;

  const totalCards = _currentPage.totalCardInpage;

  // --- ĐIỂM CẦN SỬA ---
  // Mặc định là 3 cột (cho trường hợp 3, 5, 6 card)
  let max_col = 3;

  // Nếu có đúng 4 card -> Ép xuống thành 2 cột để ra dạng Grid 2x2
  if (totalCards === 4) {
    max_col = 2;
  }
  // --------------------

  const num_rows = Math.ceil(totalCards / max_col);

  // Tính chiều cao tổng thể để căn giữa dọc
  const total_block_height = num_rows * card_height + (num_rows - 1) * margin_y;
  const start_y = (max_height - total_block_height) / 2 + card_height / 2;

  _currentPage.cardList.forEach((card, index) => {
    const row_idx = Math.floor(index / max_col);
    const col_idx = index % max_col;

    // Tính số item trong hàng hiện tại để căn giữa ngang
    let items_in_current_row;

    // Logic xác định số lượng card trong hàng hiện tại
    // Nếu là hàng cuối cùng
    if (row_idx === num_rows - 1) {
      // Lấy số dư. Nếu chia hết (dư 0) thì tức là hàng đó đầy (bằng max_col)
      let remainder = totalCards % max_col;
      items_in_current_row = remainder === 0 ? max_col : remainder;
    } else {
      // Các hàng bên trên luôn đầy
      items_in_current_row = max_col;
    }

    const current_row_width =
      items_in_current_row * card_width + (items_in_current_row - 1) * margin_x;
    const start_x = (max_width - current_row_width) / 2 + card_width / 2;

    card.x = start_x + col_idx * (card_width + margin_x);
    card.y = start_y + row_idx * (card_height + margin_y);
  });

  tdv_sdk.currentPageList = _currentPage.cardList;
};

// 3. NAVIGATION & HELPER
tdv_sdk.nextPage = function () {
  if (tdv_sdk.pageCurrent < tdv_sdk.pageInfo.length - 1) {
    tdv_sdk.pageCurrent++;
    tdv_sdk.getPostionInPage();
  }
};

tdv_sdk.prePage = function () {
  if (tdv_sdk.pageCurrent > 0) {
    tdv_sdk.pageCurrent--;
    tdv_sdk.getPostionInPage();
  }
};

tdv_sdk.getCurrentPageListInfo_getTotal = function () {
  return tdv_sdk.currentPageList.length; // Sửa lại: trả về độ dài thực (không -1)
};

tdv_sdk.getCurrentPageListInfo_getByIndex = function (index, attr) {
  if (tdv_sdk.currentPageList[index])
    return tdv_sdk.currentPageList[index][attr];
  return "";
};

tdv_sdk.playSound = function (index) {
  if (!tdv_sdk.currentPageList[index]) return;
  const _audio = tdv_sdk.currentPageList[index].audio;
  if (_audio == "") return;

  // Logic play audio đơn giản
  let audio = new Audio(_audio);
  audio.play();
};
// Thêm vào cuối file tdv_sdk.js
tdv_sdk.getTotalPages = function () {
  return tdv_sdk.pageInfo.length;
};

tdv_sdk.getCurrentPageIndex = function () {
  return tdv_sdk.pageCurrent + 1; // +1 vì index bắt đầu từ 0
};

tdv_sdk.getTotalCardsOfGame = function () {
  var total = 0;
  if (tdv_sdk.pageCardConfig) {
    for (var i = 0; i < tdv_sdk.pageCardConfig.length; i++) {
      total += tdv_sdk.pageCardConfig[i];
    }
  }
  return total;
};

// --- CẤU HÌNH ĐỘ KHÓ (DIFFICULTY CONFIG) ---
// Options: "easy", "medium", "hard", "extreme"
tdv_sdk.difficulty = "hard";

tdv_sdk.getBeatSpeed = function () {
  switch (tdv_sdk.difficulty) {
    case "easy":
      return 10.0;
    case "medium":
      return 6.0;
    case "hard":
      return 3.0;
    case "extreme":
      return 1.0;
    default:
      return 3.6;
  }
};

// --- PHẦN Input Voice ---

window.addEventListener("message", function (event) {
  var data = event.data;

  // Log ra để kiểm tra xem nhận được gì (F12 Console)
  console.log("[Game] Received data:", data);

  if (data && data.type === "action") {
    var signal = data.action; // Sẽ nhận được chuỗi "1" hoặc "0"

    if (typeof c2_callFunction !== "undefined") {
      var resultParam = parseInt(signal);

      c2_callFunction("ShowFeedback", [resultParam]);

      console.log("[Game] Called C2 Function ShowFeedback with:", resultParam);
    } else {
      console.warn(
        "[Game] c2_callFunction not found! (Are you running inside C2 Preview?)",
      );
    }
  }
});

//I was here!
