import { Schema, Types, model } from 'mongoose'

const userSchema = new Schema({
  username: { type: String, required: false },
  usernameType: { type: String, required: true, default: 'discord' },
  teamId: { type: Types.ObjectId, ref: 'Team', required: false },
  discord: {
    id: { type: String, required: true, unique: true },
    username: { type: String, required: true }
  },
  minecraft: {
    uuid: { type: String, required: false, unique: true },
    username: { type: String, required: false }
  },
  role: {
    admin: Boolean,
    moderator: Boolean,
    teamAdmin: Boolean
  },
  teamInvites: [
    Types.ObjectId
  ]
})

const whitelistSchema = new Schema({
  uuid: { type: String, required: true, unique: true },
  connected: { type: Boolean, required: true, default: false },
  code: { type: String, required: true, unique: true, length: 6 }
})

const teamSchema = new Schema({
  name: { type: String, required: true, minLength: 3, maxLength: 16, unique: true, match: /^[a-zA-Z0-9]+$/ },
  color: { type: String, required: true, match: /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/ },
  amount: { type: Number, required: true, default: 1 },
  textChannelId: { type: String, required: false },
  voiceChannelId: { type: String, required: false }
})

export const UserModel = model<IUser>('User', userSchema)
export const WhitelistModel = model<IWhitelist>('Whitelist', whitelistSchema)
export const TeamModel = model<ITeam>('Team', teamSchema)
