import { Entity, PrimaryColumn, Column, CreateDateColumn, ManyToOne, JoinColumn } from 'typeorm';
import { User } from './User.entity';

@Entity('api_keys')
export class ApiKey {
  @PrimaryColumn('char', { length: 36 })
  id!: string;

  @Column({ name: 'user_id', type: 'char', length: 36 })
  userId!: string;

  @Column({ length: 128 })
  name!: string;

  @Column({ name: 'key_prefix', length: 12 })
  keyPrefix!: string;

  @Column({ name: 'key_hash', length: 255, unique: true })
  keyHash!: string;

  @Column({ type: 'json', default: () => "'[]'" })
  scopes!: string[];

  @Column({ name: 'expires_at', type: 'datetime', precision: 3, nullable: true })
  expiresAt!: Date | null;

  @Column({ name: 'last_used_at', type: 'datetime', precision: 3, nullable: true })
  lastUsedAt!: Date | null;

  @Column({ name: 'is_active', type: 'tinyint', width: 1, default: 1 })
  isActive!: boolean;

  @CreateDateColumn({ name: 'created_at', type: 'datetime', precision: 3 })
  createdAt!: Date;

  @ManyToOne(() => User, (u) => u.apiKeys, { onDelete: 'CASCADE' })
  @JoinColumn({ name: 'user_id' })
  user!: User;
}
