// Apps Script code (latest):
// Paste semua code ni, replace yang lama
function getSheetData(name){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getSheetByName(name);
if(!sheet)return[];
var values=sheet.getDataRange().getValues();
if(values.length<=1)return[];
var headers=values[0];var result=[];
for(var i=1;i<values.length;i++){var obj={};for(var j=0;j<headers.length;j++){obj[headers[j]]=values[i][j];}result.push(obj);}
return result;
}
function doGet(e){
var sheetName=(e.parameter&&e.parameter.sheet)||'Sales Log';
var ss=SpreadsheetApp.getActiveSpreadsheet();
if(sheetName==='ALL'){
var tabs=['Sales Log','Tasks','Non-Negotiables','Nutrition','Daily Report','Workout Log','Weight Log','Learn Log','Ideas','Monthly Target','Weekly Setup'];
var result={ok:true,sheets:{}};
tabs.forEach(function(t){result.sheets[t]=getSheetData(t);});
return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType.JSON);
}
var sh=ss.getSheetByName(sheetName);
if(!sh)return ContentService.createTextOutput(JSON.stringify({ok:true,rows:[]})).setMimeType(ContentService.MimeType.JSON);
var data=sh.getDataRange().getValues();
if(data.length<=1)return ContentService.createTextOutput(JSON.stringify({ok:true,rows:[]})).setMimeType(ContentService.MimeType.JSON);
var headers=data[0];var rows=data.slice(1).map(function(r){var obj={};headers.forEach(function(h,i){obj[h]=r[i];});return obj;});
return ContentService.createTextOutput(JSON.stringify({ok:true,rows:rows})).setMimeType(ContentService.MimeType.JSON);
}
function doPost(e){
try{
var data=JSON.parse(e.postData.contents);var ss=SpreadsheetApp.getActiveSpreadsheet();
if(data.action==='monthly_target'){
var sh=ss.getSheetByName('Monthly Target');
if(!sh)return errorResponse("Sheet 'Monthly Target' tidak wujud");
var headers=sh.getRange(1,1,1,sh.getLastColumn()).getValues()[0];
if(sh.getLastRow()>1)sh.deleteRows(2,sh.getLastRow()-1);
sh.appendRow(headers.map(function(h){return data.payload[h]!==undefined?data.payload[h]:'';}));
return successResponse('Monthly Target updated');
}
if(data.action==='weekly_setup'){
var sh=ss.getSheetByName('Weekly Setup');
if(!sh)return errorResponse("Sheet 'Weekly Setup' tidak wujud");
var headers=sh.getRange(1,1,1,sh.getLastColumn()).getValues()[0];
if(sh.getLastRow()>1)sh.deleteRows(2,sh.getLastRow()-1);
if(Array.isArray(data.payload)){var rows=data.payload.map(function(item){return headers.map(function(h){return item[h]!==undefined?item[h]:'';});});sh.getRange(2,1,rows.length,headers.length).setValues(rows);}
return successResponse('Weekly Setup updated');
}
var sh=ss.getSheetByName(data.sheet)||ss.insertSheet(data.sheet);
if(sh.getLastRow()===0)sh.appendRow(data.headers);
data.rows.forEach(function(r){sh.appendRow(r);});
return ContentService.createTextOutput(JSON.stringify({ok:true})).setMimeType(ContentService.MimeType.JSON);
}catch(err){return errorResponse(err.toString());}
}
function successResponse(msg){return ContentService.createTextOutput(JSON.stringify({status:'success',message:msg})).setMimeType(ContentService.MimeType.JSON);}
function errorResponse(msg){return ContentService.createTextOutput(JSON.stringify({status:'error',message:msg})).setMimeType(ContentService.MimeType.JSON);}