var parts = [];
let latest;
let earliest;
window.parent.postMessage({ action: 'getUrl' }, '*');
window.addEventListener('message', function(event) {
  if (event.data && event.data.action === 'sendUrl') {
    const parentUrl = event.data.url;

    // Split the remaining path by "/"
    parts = parentUrl.split("/");
  }
});
gantt.ajax.get({
    url: `${base_url}activity/${ganttId}/${proyekId}/get`,
    headers: {
        "Content-Type": "application/json",
        "Authorization": `Bearer ${token}`
    }
}).then(function (xhr) {
    let data = {};
    let response =  xhr.responseText;
    let obj = JSON.parse(response);
    data['data'] = obj.data.data;
    data['links'] = obj.data.links;
    // console.log("data parse wrong", data);
    // check if baseline has been set
    if (data.data && data.data.length > 0) {
        console.log('baseline', data.data[0].planned_start);
        if (data.data[0].planned_start !== null && data.data[0].planned_end !== null) {
            console.log('baseline set');
            isBaselineSet = true;
        }
        else {
            console.log('baseline has not been set');
            isBaselineSet = false;
        }
    }

    if(!parts[7]){
      gantt.silent(function () {
        gantt.parse(data);
        earliest = getEarliestTaskDate();
        latest = getLatestTaskDate();
      });
    }
});

function refresData(id){
    gantt.ajax.get({
        url: `${base_url}activity/${ganttId}/${proyekId}/get`,
        headers: {
            "Content-Type": "application/json",
            "Authorization": `Bearer ${token}`
        }
    }).then(function (xhr) {
        gantt.clearAll();
        let data = {};
        let response =  xhr.responseText;
        let obj = JSON.parse(response);
        data['data'] = obj.data.data;
        data['links'] = obj.data.links;
        // console.log("data parse wrong", data);
        if(!parts[7]){
          gantt.silent(function () {
            gantt.parse(data);
            earliest = getEarliestTaskDate();
            latest = getLatestTaskDate();
          });
        }
        if(id){
            if(gantt.isTaskExists(id)){
                expandTask();
            }
        }
    });
}

// entity - "task"|"link"
// action - "create"|"update"|"delete"
// data - an object with task or link data
// id – the id of a processed object (task or link)
var dp = gantt.createDataProcessor(function(entity, action, data, id) {
    switch(action) {
        case "create":

            if(entity=="task"){
                data['proyek_id'] = proyekId;
                data['start_date'] = `${data.start_date}+07`;
                data['end_date'] = `${data.start_date}`;
                // data['start_date'] = moment(data.start_date).format("DD-MM-YYYY HH:mm:ss+07");
                // data['end_date'] = moment(data.end_date).format("DD-MM-YYYY HH:mm:ss+07");

                if(data && data.parent){
                    data['parent_id'] = data.parent;
                }
            }
            data['version_gantt_id'] = ganttId;
            return gantt.ajax.post({
                headers: {
                  "Content-Type": "application/json",
                  "Authorization": `Bearer ${token}`
                },
                url: base_url + entity,
                data:JSON.stringify(data)
            }).then(function(response){
                let res = response.responseText
                res = JSON.parse(res)
                // console.log("cek response", res)
                if(entity=="link"){
                    gantt.changeLinkId(id, res.tid);
                }else if(entity=="task"){
                    gantt.changeTaskId(id, res.tid);
                }
                // refresData();
            });
        break;
        case "update":
            if(entity=="task"){
                data['start_date'] = moment(data.start_date).format("YYYY-MM-DD HH:mm:ss+07");
                data['end_date'] = moment(data.end_date).format("YYYY-MM-DD HH:mm:ss+07");
                // data['planned_start'] = moment(data.planned_start).format("YYYY-MM-DD HH:mm:ss+07");
                // data['planned_end'] = moment(data.planned_end).format("YYYY-MM-DD HH:mm:ss+07");

                if(data && data.parent){
                    data['parent_id'] = data.parent;
                }

                Object.keys(data).forEach(function(key) {
                    if(data[key]==""){
                        data[key]=null;
                    }
                });
            }
            // console.log("cek data update", data)
            // let dataProgress = parseInt(data.progress)
            // dataProgress = dataProgress/100
            return gantt.ajax.put({
                headers: {
                  "Content-Type": "application/json",
                  "Authorization": `Bearer ${token}`
                },
                url: base_url + entity + "/" + id,
                data:JSON.stringify(data)
            }).then(function(response){
                if(entity=="task"){
                    let parent = data.parent;
                    let responseText = JSON.parse(response.responseText)
                    let resData = responseText
                    // console.log("dataRes", resData);
                    let updateBobot = resData.update_bobot || false
                    if(updateBobot){
                        refresData(id);
                    }else{
                        if(parent && parent > 0){
                            updateActivity(parent);
                        }
                    }
                    // console.log("data", data);
                    // refresData();
                    // if(resData && resData.rencana_biaya){
                    //     if(data.rencana_biaya != resData.rencana_biaya){
                    //         // gantt.getTask(id).bobot_planning = resData.bobot_planning;
                    //         // gantt.updateTask(id);

                    //     }else{
                    //         if(parent && parent > 0){
                    //             updateActivity(parent);
                    //         }
                    //     }
                    // }
                }
            });

        break;
        case "delete":
            // console.log("cek data", data)
            return gantt.ajax.del({
                headers: {
                  "Authorization": `Bearer ${token}`
                },
                url: base_url + entity + "/" + id
            }).then(function(response){
                if(entity=="task"){
                    let parent = data.parent;
                    if(parent && parent > 0){
                        let children = gantt.getChildren(parent);
                        updateActivity(parent);
                        if(children && children.length > 0){

                        }else{
                            if(gantt.isTaskExists(parent)){
                                gantt.getTask(parent).type = "task";
                                gantt.updateTask(parent);
                            }
                        }
                    }
                    // console.log("cek data delete", data)
                }
                // let res = response.responseText
                // res = JSON.parse(res)
                // console.log("cek response", res)

                // refresData();
            });
         break;
   }
});