var uploadFolderID = 'Your-Google-Drive-Folder-ID';  // Replace with your Drive folder ID  
var sheetName = 'Sheet1'; // your sheet name

var t1 =1223;

function doPost(e) {
  
  var lock = LockService.getScriptLock();
  lock.tryLock(10000);

  try {   

    var sheet =  SheetConn(sheetName);

    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
    var nextRow = sheet.getLastRow() + 1;

    var newRow = headers.map(function(header) {
      return header === "timestamp" ? new Date() : e.parameter[header];
    });

    // Handle media file upload
    if (e.parameter.media) {
       
      //prepare file to be created and uploaded
      const mediaBlob = Utilities.newBlob(
        Utilities.base64Decode(e.parameter.media),
        e.parameter.mimeType, 
        e.parameter.fileName
      );

      // Save file to Google Drive
      const folder = DriveApp.getFolderById(uploadFolderID);
      const file = folder.createFile(mediaBlob);
      const fileUrl = file.getUrl();

      // Find the "Media" column index in headers
      const mediaColumnIndex = headers.indexOf("media");

      if (mediaColumnIndex > -1) {
        //found the media column
        newRow[mediaColumnIndex] = fileUrl;
      } else {
        // Add to the end if "media" column doesn't exist
        newRow.push(fileUrl);
      }
    } else {
      // Add an empty value if no media uploaded
      const mediaColumnIndex = headers.indexOf("media");
      if (mediaColumnIndex > -1) {
        newRow[mediaColumnIndex] = "";
      } else {
        newRow.push("");
      }
    }

    // Write the new row data to the sheet
    sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow]);

    return ContentService
      .createTextOutput(JSON.stringify({ result: "success", row: nextRow}))
      .setMimeType(ContentService.MimeType.JSON);
      
  } catch (error) {
    return ContentService
      .createTextOutput(JSON.stringify({ result: "error", error: error.message }))
      .setMimeType(ContentService.MimeType.JSON);
  } finally {
    lock.releaseLock();
  }
};




function SheetConn(SheetName) {
  /*
  This will connect to the sheet. 
  This is needed in order to access the sheet and read and write data.
  
  @parameters: sheetname
  @return: connection string
  */
  
  // Working ID -> get this from sheet URL
  var strFileID = SpreadsheetApp.getActiveSpreadsheet().getId();
  var ss = SpreadsheetApp.openById(strFileID); 
  var sheet = ss.getSheetByName(SheetName);
  
  return sheet;   
}


function getLastPopulatedRow(SheetConn, SourceRange) {
  /*
  This will get the last row that has data
  
  @parameters: sheet connection string and column range, i.e., A1:A
  @return: the last row number found data on
  */
  
  var s = SheetConn;
  var data = s.getRange(SourceRange + s.getLastRow()).getValues();
  var populated = false;
  
  for (var i = data.length - 1; i > 0; i--) {
    for (var j = 0; j < data[0].length; j++) {
      if (data[i][j]) {
        populated = true;
        break;
      }
    }
    if (populated) break;
  }
  i++;
  return i;
}

