// Cadre "debouchés" sur fiche etudiant
// affichage et saisie des informations sur l'avenir de l'étudiant.

// console.log('etud_debouche.js loaded');

$(function () {
  display_itemsuivis(false);
});

function display_itemsuivis(active) {
  var etudid = $("div#fichedebouche").data("etudid");
  var readonly = $("div#fichedebouche").data("readonly"); // present ro interface

  if (!readonly) {
    $("#adddebouchelink")
      .off("click")
      .click(function (e) {
        e.preventDefault();
        $.post(SCO_URL + "/itemsuivi_create", {
          etudid: etudid,
          fmt: "json",
        }).done(item_insert_new);

        return false;
      });
  }
  // add existing items
  $.get(
    SCO_URL + "/itemsuivi_list_etud",
    { etudid: etudid, fmt: "json" },
    function (L) {
      for (var i in L) {
        item_insert(
          L[i]["itemsuivi_id"],
          L[i]["item_date"],
          L[i]["situation"],
          L[i]["tags"],
          readonly
        );
      }
    }
  );

  $("div#fichedebouche").accordion({
    heightStyle: "content",
    collapsible: true,
    active: active,
  });
}

function item_insert_new(it) {
  item_insert(it.itemsuivi_id, it.item_date, it.situation, "", false);
}

function item_insert(itemsuivi_id, item_date, situation, tags, readonly) {
  if (item_date === undefined) item_date = Date2DMY(new Date());
  if (situation === undefined) situation = "";
  if (tags === undefined) tags = "";

  var nodes = item_nodes(itemsuivi_id, item_date, situation, tags, readonly);
  // insert just before last li:
  if ($("ul.listdebouches li.adddebouche").length > 0) {
    $("ul.listdebouches").children(":last").before(nodes);
  } else {
    // mode readonly, pas de li "ajouter"
    $("ul.listdebouches").append(nodes);
  }
}

function item_nodes(itemsuivi_id, item_date, situation, tags, readonly) {
  // console.log('item_nodes: itemsuivi_id=' + itemsuivi_id);
  var sel_mois =
    'Situation à la date du <input type="text" class="itemsuividatepicker" size="10" value="' +
    item_date +
    '"/><span class="itemsuivi_suppress" onclick="itemsuivi_suppress(\'' +
    itemsuivi_id +
    '\')"><img width="10" height="9" border="0" title="" alt="supprimer cet item" src="/ScoDoc/static/icons/delete_small_img.png"/></span>';

  var h = sel_mois;
  // situation
  h +=
    '<div class="itemsituation editable" data-type="textarea" data-url="itemsuivi_set_situation" data-placeholder="<em>décrire situation...</em>" data-object="' +
    itemsuivi_id +
    '">' +
    situation +
    "</div>";
  // tags:
  h +=
    '<div class="itemsuivi_tag_edit"><textarea class="itemsuivi_tag_editor">' +
    tags +
    "</textarea></div>";

  var nodes = $($.parseHTML('<li class="itemsuivi">' + h + "</li>"));
  var dp = nodes.find(".itemsuividatepicker");
  dp.blur(function (e) {
    var date = this.value;
    // console.log('selected text: ' + date);
    $.post(SCO_URL + "/itemsuivi_set_date", {
      item_date: date,
      itemsuivi_id: itemsuivi_id,
    });
  });
  dp.datepicker({
    onSelect: function (date, instance) {
      // console.log('selected: ' + date + 'for itemsuivi_id ' + itemsuivi_id);
      $.post(SCO_URL + "/itemsuivi_set_date", {
        item_date: date,
        itemsuivi_id: itemsuivi_id,
      });
    },
    showOn: "button",
    buttonImage: "/ScoDoc/static/icons/calendar_img.png",
    buttonImageOnly: true,
    dateFormat: "dd/mm/yy",
    duration: "fast",
    disabled: readonly,
  });
  dp.datepicker(
    "option",
    $.extend({ showMonthAfterYear: false }, $.datepicker.regional["fr"])
  );

  if (readonly) {
    // show tags read-only
    readOnlyTags(nodes.find(".itemsuivi_tag_editor"));
  } else {
    // bind tag editor
    nodes.find(".itemsuivi_tag_editor").tagEditor({
      initialTags: "",
      placeholder: "Tags...",
      onChange: function (field, editor, tags) {
        $.post("itemsuivi_tag_set", {
          itemsuivi_id: itemsuivi_id,
          taglist: tags.join(),
        });
      },
      autocomplete: {
        delay: 200, // ms before suggest
        position: { collision: "flip" }, // automatic menu position up/down
        source: "itemsuivi_tag_search",
      },
    });

    // bind inplace editor
    nodes.find("div.itemsituation").jinplace();
  }

  return nodes;
}

function Date2DMY(date) {
  var year = date.getFullYear();

  var month = (1 + date.getMonth()).toString();
  month = month.length > 1 ? month : "0" + month;

  var day = date.getDate().toString();
  day = day.length > 1 ? day : "0" + day;

  return day + "/" + month + "/" + year;
}

function itemsuivi_suppress(itemsuivi_id) {
  $.post(SCO_URL + "/itemsuivi_suppress", { itemsuivi_id: itemsuivi_id });
  // Clear items and rebuild:
  $("ul.listdebouches li.itemsuivi").remove();
  display_itemsuivis(0);
}