/**
 * Buzz the passed `pattern` out on the internal vibration motor.
 *
 * A pattern is a sequence of `.`, `,`, `-`, `:`, `;` and `=` where
 * - `.` is one short and weak vibration
 * - `,` is one medium and weak vibration
 * - `-` is one long and weak vibration
 * - `:` is one short and strong vibration
 * - `;` is one medium and strong vibration
 * - `=` is one long and strong vibration
 *
 * You can use the `buzz_menu` module to display a menu where some common patterns can be chosen.
 *
 * @param {string} pattern A string like `.-.`, `..=`, `:.:`, `..`, etc.
 * @returns a Promise
 */
exports.pattern = pattern => new Promise(resolve => {
  function doBuzz() {
    if (pattern == "") resolve();
    var c = pattern[0];
    pattern = pattern.substr(1);
    const BUZZ_WEAK = 0.25, BUZZ_STRONG = 1;
    const SHORT_MS = 100, MEDIUM_MS = 200, LONG_MS = 500;    
    if (c == ".") Bangle.buzz(SHORT_MS, BUZZ_WEAK).then(() => setTimeout(doBuzz, 100));
    else if (c == ",") Bangle.buzz(MEDIUM_MS, BUZZ_WEAK).then(() => setTimeout(doBuzz, 100));
    else if (c == "-") Bangle.buzz(LONG_MS, BUZZ_WEAK).then(() => setTimeout(doBuzz, 100));
    else if (c == ":") Bangle.buzz(SHORT_MS, BUZZ_STRONG).then(() => setTimeout(doBuzz, 100));
    else if (c == ";") Bangle.buzz(MEDIUM_MS, BUZZ_STRONG).then(() => setTimeout(doBuzz, 100));
    else if (c == "=") Bangle.buzz(LONG_MS, BUZZ_STRONG).then(() => setTimeout(doBuzz, 100));
    else setTimeout(doBuzz, 100);
  }
  doBuzz();
});
