/**
 * Prepare SMTT
 * @author Jens Hatlak <jh@junetz.de>
 * @version 2010-07-15
 */
let categories = {
  "MailNews": [
    "mail", "imap", "pop", "attachment", "newsgroup", "local folders", "inbox",
    "message", "compose", "archiv", "account", "signature"
  ],
  "Address Book": [ "addrbook", "address" ],
  "Bookmarks": [ "bookmark" ],
  "Download Manager": [ "download" ],
  "History": [ "history" ],
  "Help": [ "help", "document" ],
  "Locales": [ "locale" ],
  "Audio/Video": [ "audio", "video", "webm", "ogg", "vorbis", "theora", "vp8" ],
  "Session Store": [ "session", "restore" ],
  "Preferences": [ "preferences" ],
  "Linux": [ "linux", "unix", "gtk" ],
  "Mac": [ "mac", "os x" ],
  "Compiling": [ "compiling", "build option", "client\.py" ],
  "General": [],
};

function subject4smtt(aSubject) {
  let subject = aSubject;
  subject = subject.replace(/^[^-]* - /, "");
  subject = subject.replace(/^.*RELBRANCH \| /, "");
  subject = subject.replace(/(.*)(bug \d+)$/i, "$2 - $1");
  subject = subject.replace(/^(bustage )?(fix )?(for )?bug (\d+)[ ,;:]*/i, "bug $4");
  subject = subject.replace(/&/g, "&amp;");
  subject = subject.replace(/</g, "&lt;");
  subject = subject.replace(/>/g, "&gt;");
  subject = subject.replace(/"/g, "&quot;");
  subject = subject.replace(/[ .,;]*[afmors/+]+=\S+[, ]/g, "");
  subject = subject.replace(/[ .,;]*[afmors/+]+=\S+$/g, "");
  subject = subject.replace(/^(Bug \d+)[- ;:]*(.*)/i, "$2 ($1)");
  subject = subject.replace(/Bug (\d+)/gi, "<a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=$1\">Bug $1</a>");
  return subject;
}

function catmatch(aSubject, aCat) {
  for (let i = 0; i < aCat.length; ++i) {
    let re = new RegExp(aCat[i], "i");
    if (aSubject.search(re) != -1)
      return true;
  }
  return false;
}

let catdata = {};
for (let cat in categories)
  catdata[cat] = [];

let msgs = gFolderDisplay.selectedMessages;
for (let i = 0; i < msgs.length; ++i) {
  let msgHdr  = msgs[i];
  let subject = JHBF.mailnews.getSubjectFromMsgHdr(msgHdr);
  subject = subject4smtt(subject);
  let pushed = false;
  for (let cat in categories) {
    if (catmatch(subject, categories[cat])) {
      catdata[cat].push(subject);
      pushed = true;
      break;
    }
  }
  if (!pushed)
    catdata.General.push(subject);
}

let html = "";
for (let cat in catdata) {
  if (catdata[cat].length) {
    html += "<span style=\"font-weight: bold\">" + cat + ":</span>\n";
    html += "<ul>\n";
    for each (let subject in catdata[cat])
      html += "  <li>" + subject + "</li>\n";
    html += "</ul>\n";
  }
}

JHBF.copyHTMLToClipboard(html);

let file = JHBF.writeHTMLToFile(html, "smtt-prepare.html");
JHBF.openFileInComposer(window, file);
