import {
  Entity,
  PrimaryGeneratedColumn,
  Column,
  CreateDateColumn,
  UpdateDateColumn,
  Index,
} from 'typeorm';

@Entity('client_refresh_tokens')
@Index(['token_hash'], { unique: true })
@Index(['user_id'])
@Index(['expires_at'])
export class ClientRefreshToken {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  user_id: number;

  /**
   * SHA-256 hash of the refresh token.
   * Never store the raw refresh token in the database.
   */
  @Column({ type: 'varchar', length: 255, unique: true })
  token_hash: string;

  /**
   * Optional device information.
   */
  @Column({ type: 'varchar', length: 255, nullable: true })
  device_name: string | null;

  /**
   * Mobile, Web, etc.
   */
  @Column({
    type: 'varchar',
    length: 50,
    default: 'unknown',
  })
  device_type: string;

  @Column({
    type: 'varchar',
    length: 255,
    nullable: true,
  })
  user_agent: string | null;

  @Column({
    type: 'varchar',
    length: 100,
    nullable: true,
  })
  ip_address: string | null;

  /**
   * Token expiry date.
   */
  @Column({ type: 'datetime' })
  expires_at: Date;

  /**
   * Token can be revoked during logout.
   */
  @Column({
    type: 'boolean',
    default: false,
  })
  is_revoked: boolean;

  @Column({
    type: 'datetime',
    nullable: true,
  })
  revoked_at: Date | null;

  @CreateDateColumn()
  created_at: Date;

  @UpdateDateColumn()
  updated_at: Date;
}