const { PartialWebhookMixin } = require('discord.js');
const { sequelize } = require('../index');
const Sequelize = require('sequelize');

const Users = sequelize.define('users', {
  id: {
    type: Sequelize.STRING,
    primaryKey: true,
    unique: true,
  },
  useMinecraftUsername: {
    type: Sequelize.BOOLEAN,
    defaultValue: false,
  },
  rawUsername: {
    type: Sequelize.STRING,
  },
  moderator: {
    type: Sequelize.BOOLEAN,
    defaultValue: false,
  },
  admin: {
    type: Sequelize.BOOLEAN,
    defaultValue: false,
  },
});

const Team = sequelize.define('teams', {
  name: {
    type: Sequelize.STRING,
    unique: true,
    validate: {
      len: [3, 16],
      isAlphanumeric: true,
    },
  },
  color: {
    type: Sequelize.STRING,
    validate: {
      is: /^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,
    },
  },
  textChannelId: {
    type: Sequelize.STRING,
  },
  voiceChannelId: {
    type: Sequelize.STRING,
  },
});

const Minecraft = sequelize.define('minecraft', {
  uuid: {
    type: Sequelize.UUID,
    unique: true,
    primaryKey: true,
  },
  whitelisted: {
    type: Sequelize.BOOLEAN,
    defaultValue: false,
  },
  code: {
    type: Sequelize.STRING,
    unique: true,
  },
});

Minecraft.hasOne(Users);
Users.belongsTo(Minecraft);

Team.hasMany(Users, { as: 'members' });
Users.belongsTo(Team);

module.exports = { Users, Team, Minecraft };
