"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports["default"] = formatEvent;

var _utils = require("../utils");

function formatEvent() {
  var attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  var title = attributes.title,
      productId = attributes.productId,
      method = attributes.method,
      uid = attributes.uid,
      sequence = attributes.sequence,
      timestamp = attributes.timestamp,
      start = attributes.start,
      startType = attributes.startType,
      startInputType = attributes.startInputType,
      startOutputType = attributes.startOutputType,
      duration = attributes.duration,
      end = attributes.end,
      endInputType = attributes.endInputType,
      endOutputType = attributes.endOutputType,
      description = attributes.description,
      url = attributes.url,
      geo = attributes.geo,
      location = attributes.location,
      status = attributes.status,
      categories = attributes.categories,
      organizer = attributes.organizer,
      attendees = attributes.attendees,
      alarms = attributes.alarms,
      recurrenceRule = attributes.recurrenceRule,
      busyStatus = attributes.busyStatus,
      classification = attributes.classification,
      created = attributes.created,
      lastModified = attributes.lastModified,
      calName = attributes.calName,
      htmlContent = attributes.htmlContent;
  var icsFormat = '';
  icsFormat += 'BEGIN:VCALENDAR\r\n';
  icsFormat += 'VERSION:2.0\r\n';
  icsFormat += 'CALSCALE:GREGORIAN\r\n';
  icsFormat += (0, _utils.foldLine)("PRODID:".concat(productId)) + '\r\n';
  icsFormat += (0, _utils.foldLine)("METHOD:".concat(method)) + '\r\n';
  icsFormat += calName ? (0, _utils.foldLine)("X-WR-CALNAME:".concat(calName)) + '\r\n' : '';
  icsFormat += "X-PUBLISHED-TTL:PT1H\r\n";
  icsFormat += 'BEGIN:VEVENT\r\n';
  icsFormat += "UID:".concat(uid, "\r\n");
  icsFormat += (0, _utils.foldLine)("SUMMARY:".concat(title ? (0, _utils.setSummary)(title) : title)) + '\r\n';
  icsFormat += "DTSTAMP:".concat(timestamp, "\r\n"); // All day events like anniversaries must be specified as VALUE type DATE

  icsFormat += "DTSTART".concat(start && start.length == 3 ? ";VALUE=DATE" : "", ":").concat((0, _utils.formatDate)(start, startOutputType || startType, startInputType), "\r\n"); // End is not required for all day events on single days (like anniversaries)

  if (!end || end.length !== 3 || start.length !== end.length || start.some(function (val, i) {
    return val !== end[i];
  })) {
    if (end) {
      icsFormat += "DTEND".concat(end.length === 3 ? ";VALUE=DATE" : "", ":").concat((0, _utils.formatDate)(end, endOutputType || startOutputType || startType, endInputType || startInputType), "\r\n");
    }
  }

  icsFormat += sequence ? "SEQUENCE:".concat(sequence, "\r\n") : '';
  icsFormat += description ? (0, _utils.foldLine)("DESCRIPTION:".concat((0, _utils.setDescription)(description))) + '\r\n' : '';
  icsFormat += url ? (0, _utils.foldLine)("URL:".concat(url)) + '\r\n' : '';
  icsFormat += geo ? (0, _utils.foldLine)("GEO:".concat((0, _utils.setGeolocation)(geo))) + '\r\n' : '';
  icsFormat += location ? (0, _utils.foldLine)("LOCATION:".concat((0, _utils.setLocation)(location))) + '\r\n' : '';
  icsFormat += status ? (0, _utils.foldLine)("STATUS:".concat(status)) + '\r\n' : '';
  icsFormat += categories ? (0, _utils.foldLine)("CATEGORIES:".concat(categories)) + '\r\n' : '';
  icsFormat += organizer ? (0, _utils.foldLine)("ORGANIZER;".concat((0, _utils.setOrganizer)(organizer))) + '\r\n' : '';
  icsFormat += busyStatus ? (0, _utils.foldLine)("X-MICROSOFT-CDO-BUSYSTATUS:".concat(busyStatus)) + '\r\n' : '';
  icsFormat += classification ? (0, _utils.foldLine)("CLASS:".concat(classification)) + '\r\n' : '';
  icsFormat += created ? 'CREATED:' + (0, _utils.formatDate)(created) + '\r\n' : '';
  icsFormat += lastModified ? 'LAST-MODIFIED:' + (0, _utils.formatDate)(lastModified) + '\r\n' : '';
  icsFormat += htmlContent ? (0, _utils.foldLine)("X-ALT-DESC;FMTTYPE=text/html:".concat(htmlContent)) + '\r\n' : '';

  if (attendees) {
    attendees.map(function (attendee) {
      icsFormat += (0, _utils.foldLine)("ATTENDEE;".concat((0, _utils.setContact)(attendee))) + '\r\n';
    });
  }

  icsFormat += recurrenceRule ? "RRULE:".concat(recurrenceRule, "\r\n") : '';
  icsFormat += duration ? "DURATION:".concat((0, _utils.formatDuration)(duration), "\r\n") : '';

  if (alarms) {
    alarms.map(function (alarm) {
      icsFormat += (0, _utils.setAlarm)(alarm);
    });
  }

  icsFormat += "END:VEVENT\r\n";
  icsFormat += "END:VCALENDAR\r\n";
  return icsFormat;
}