import { Entity, Column, PrimaryGeneratedColumn, CreateDateColumn, UpdateDateColumn, OneToMany } from 'typeorm';
import { CharacterEntity } from './character.entity';
import { KeyEntity } from './key.entity';
import { TeamSlots } from '../frontend';

@Entity()
export class UserEntity {
  @PrimaryGeneratedColumn()
  id!: number;

  @Column({ unique: true })
  walletAddress!: string;

  @Column()
  nonce!: string;

  @Column('json', { nullable: true, default: { tank: null, melee: null, ranged: null, healer: null } })
  team!: TeamSlots;

  @OneToMany(() => CharacterEntity, character => character.user, { eager: false })
  characters!: CharacterEntity[];

  @OneToMany(() => KeyEntity, key => key.user, { eager: false })
  keys!: KeyEntity[];

  @CreateDateColumn()
  createdAt!: Date;

  @UpdateDateColumn()
  updatedAt!: Date;

  constructor(partial: Partial<UserEntity>) {
    Object.assign(this, partial);
  }
}