import { Column, Entity, JoinColumn, OneToMany, OneToOne } from 'typeorm'
import { SoftDeleteEntity } from '../entity'
import { TableSubscriber } from '../room-plan'
import { UserCredentials } from './user-credentials.model'

export class MessagingToken {
	web?: string
	mobile?: string
}

@Entity()
export class User extends SoftDeleteEntity<User> {
	@Column({
		type: 'varchar',
		length: 60,
		nullable: false,
	})
	firstName: string

	@Column({
		type: 'varchar',
		length: 60,
		nullable: false,
	})
	lastName: string

	@Column({
		type: 'varchar',
		length: 255,
		nullable: false,
	})
	email: string

	@Column({
		type: 'boolean',
		default: false,
		nullable: false,
	})
	emailVerified: boolean

	@Column({
		type: 'boolean',
		default: false,
		nullable: true,
	})
	isAdmin: boolean

	@Column({
		type: 'varchar',
		length: 3,
		nullable: true,
	})
	preferedLanguage?: string

	@Column({
		type: 'json',
		nullable: true,
	})
	messagingToken?: MessagingToken

	@OneToOne(() => UserCredentials, { nullable: true })
	@JoinColumn()
	credentials?: UserCredentials

	/**
	 * List of tables subscribed by the user
	 */
	@OneToMany(() => TableSubscriber, (subscriber) => subscriber.user)
	tableSubscriptions: TableSubscriber[]
}
