import sql from "../sql";

let _query_get = `
  select item,
    rank() over (order by id),
    count(*) over (rows between unbounded preceding and unbounded following) as total
  from mcmaniacs
  order by {order}
  limit 1
`;
let _query_add = `
  insert into mcmaniacs (item) values ($1) on conflict do nothing
`;

export default async bot => {
  
  return [{
    name: "mcmaniac_add",
    call: /Mc.*iaC/,
    set: "nxy",
    f: e => {
      const match = e.message.match(/(Mc\S+iaC?)/)[0];
      sql.any(_query_add, [match])
        .then()
        .catch(err => {});
    }
  }, {
    name: "mcmaniac_get",
    call: /^(\.|\/)mcmaniac/i,
    set: "nxy",
    f: e => {
      const args = e.message.trim().substring(10);
      let order = "id asc"
        , offset
        , query = _query_get;

      if (args.length > 0) {
        if (isNaN(parseInt(args)))
          return e.reply("Mayonnaise ist keine Zahl du Pfosten.");
        const index = parseInt(args);
        if (index < 0)
          order = "id desc";
        else if(index === 0)
          offset = 1;
        else
          offset = index;
        offset = Math.abs(index) - 1;
        query += " offset {offset}";
      }
      else
        order = "random()";
      query = query
        .split("{order}").join(order)
        .split("{offset}").join(offset);
      sql.any(query)
        .then(rows => {
          e.reply(`[${rows[0].rank}/${rows[0].total}] ${rows[0].item}`);
        })
        .catch(err => {
          console.log(err);
        });
    }
  }];
};