const { DataTypes } = require("sequelize");
const database = require("..");

// models
const bookmark = require("./bookmark");
const transaction = require("./transaction");
const purchase = require("./purchase");
const subscription = require("./subscription");

const user = database.define("user", {
	userId: {
		type: DataTypes.UUID,
		allowNull: false,
		defaultValue: DataTypes.UUIDV4,
		primaryKey: true
	},
	name: {
		type: DataTypes.STRING(100),
		allowNull: true
	},
	emailAddress: {
		type: DataTypes.STRING(200),
		allowNull: false,
		unique: true
	},
	password: {
		type: DataTypes.STRING(300),
		allowNull: false
	},
	username: {
		type: DataTypes.STRING(40),
		allowNull: false
	},
	avatar: {
		type: DataTypes.STRING(200),
		allowNull: true
	},
	isVerified: {
		type: DataTypes.BOOLEAN,
		allowNull: false,
		defaultValue: false
	},
	isOwner: {
		type: DataTypes.BOOLEAN,
		allowNull: false,
		defaultValue: false
	},
	isModerator: {
		type: DataTypes.BOOLEAN,
		allowNull: false,
		defaultValue: false
	},
	isBlocked: {
		type: DataTypes.BOOLEAN,
		allowNull: false,
		defaultValue: false
	}
});

user.hasMany(bookmark, {
	onDelete: "CASCADE",
	foreignKey: {
		name: "userId",
		type: DataTypes.UUID,
		allowNull: false
	}
});

user.hasOne(transaction, {
	onDelete: "CASCADE",
	foreignKey: {
		name: "userId",
		type: DataTypes.UUID,
		allowNull: false
	}
});

user.hasMany(purchase, {
	foreignKey: {
		name: "userId",
		type: DataTypes.UUID,
		allowNull: false
	}
});

user.hasMany(subscription, {
	foreignKey: {
		name: "userId",
		type: DataTypes.UUID,
		allowNull: false
	}
});

module.exports = user;