const API_KEY = 'AIzaSyAobSJ6RDkfIj6oUNYhvRjygkAODzQocyg';
const DEFAULT_FOLDER_ID = '1Q6LJW_3YarYcUUvUPKqfH7DqPDuJ-8ra'; // รหัสที่อยู่หลัง /folders/ ใน URL
const UPLOAD_TO = 'https://web-lsw-dev.nueamek.app/api/upload-file';

const { google } = require('googleapis');
const fs = require('fs');

// 1. ระบุ path ของไฟล์ JSON ที่คุณโหลดมา
const KEYFILEPATH = 'lsw-website-484309-6a86a07bc9d5.json';

// 2. กำหนดสิทธิ์ (Scopes) - ในที่นี้คืออ่านไฟล์ใน Drive
const SCOPES = ['https://www.googleapis.com/auth/drive.readonly'];

// 3. สร้างตัวตน (Auth Client)
const auth = new google.auth.GoogleAuth({
  keyFile: KEYFILEPATH,
  scopes: SCOPES,
});

async function listFiles(deep = 0,folderId = undefined, folderName = '') {
  // https://www.googleapis.com/drive/v3/files
  const url = `https://www.googleapis.com/drive/v3/files?q='${folderId ?? DEFAULT_FOLDER_ID}'+in+parents&key=${API_KEY}`;

  let files = []
  try {
    const response = await fetch(url);
    const data = await response.json();

    if (data.files && data.files.length > 0) {
      let forTest = data.files
      if(deep == 0){
        forTest = data.files.slice(0, 1)
      }
      data.files.forEach(async file => {
        // console.log(file);
        console.log(`ชื่อไฟล์: ${file.name}, ID: ${file.id}`);

        if(file.mimeType.includes('folder')){
          const fileResultList = await listFiles(deep+1, file.id, file.name)
          const onlyHaveUrlList = fileResultList.filter(fileResult => fileResult.url)
          files.push(...onlyHaveUrlList)
        }
        else if(file.mimeType.includes('image/jpeg')){
          const fileResult = await downloadAndUpload(file.id, file.name)
          if(fileResult.url){
            files.push(fileResult)
          }
        }
      });
    } else {
      console.log('ไม่พบไฟล์ในโฟลเดอร์นี้');
    }
  } catch (error) {
    console.error('เกิดข้อผิดพลาด:', error);
  }

  if(deep == 1 && folderName){
    const payload = {
      menuId: 402,
      templateId: 2,
      tag: 2,
      title: folderName,
      content: '',
      startAt: "2026-01-14",
      filedoc: null,
      imageList: files,
    }
  }

  return files
}

async function downloadAndUpload(fileId, fileName) {
  try {
    // #region วิธีที่ง่ายแต่ access มากไปจะโดน google block เพราะคิดว่าเป็น bot
    // // 1. ดาวน์โหลดเนื้อหาไฟล์จาก Google Drive (ใช้ alt=media)
    // const downloadUrl = `https://www.googleapis.com/drive/v3/files/${fileId}?alt=media&key=${API_KEY}`;
    // const response = await fetch(downloadUrl);
    
    // console.log('response', response)
    // if (!response.ok) {
    //   // อ่านรายละเอียด Error จาก Google
    //   const errorText = await response.text();
    //   console.error("Error Detail:", errorText); 
    //   throw new Error('Download failed');
    // } 
    
    // const fileBlob = await response.blob();

    // // 2. สร้าง FormData เพื่อเตรียมส่งไปยัง API ของคุณ
    // const formData = new FormData();
    // // 'file' คือชื่อ field ที่ API ของคุณรอรับ (เปลี่ยนได้ตามความเหมาะสม)
    // formData.append('file', fileBlob, fileName); 
    // #endregion

    // #region Service Account 
    const drive = google.drive({ version: 'v3', auth });

    // 1. การดึงเนื้อหาไฟล์ (Media)
    const res = await drive.files.get(
      { fileId: fileId, alt: 'media' },
      // { responseType: 'stream' }
      { responseType: 'arraybuffer' }
    );
    // คุณสามารถส่ง res.data นี้เข้า FormData เพื่อส่งต่อไปยัง API ของคุณได้เลย

    // 2. สร้าง FormData เพื่อเตรียมส่งไปยัง API ของคุณ
    // แปลง ArrayBuffer ที่ได้เป็น Blob
    const fileBlob = new Blob([res.data]);
    const formData = new FormData();
    formData.append('file', fileBlob, fileName); 
    // #endregion

    // 3. ส่งข้อมูลไปยัง API ของคุณด้วย POST method
    const uploadResponse = await fetch(UPLOAD_TO, {
      method: 'POST',
      body: formData
    });

    const result = await uploadResponse.json();
    // console.log(`อัปโหลดไฟล์ ${fileName} สำเร็จ:`, result);

    return result
  } catch (error) {
    console.error(`เกิดข้อผิดพลาดกับไฟล์ ${fileName}:`, error);
    return {
      error: error
    }
  }
}

// // ตัวอย่างการใช้งานร่วมกับรายชื่อไฟล์ที่ได้จากข้อก่อนหน้า
// async function processAllFiles(files) {
//   for (const file of files) {
//     // กรองเอาเฉพาะไฟล์ .js (ถ้าจำเป็น)
//     if (file.name.endsWith('.js')) {
//       await downloadAndUpload(file.id, file.name);
//     }
//   }
// }

// downloadAndUpload('14SGY4irPJ1FwUA5472zlyYtzHvDNaCQ4', 'test')
listFiles();