import { Column, Entity, Index, JoinColumn, ManyToOne, OneToMany, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm';
import { MonitoringCheckType } from '../enums/website-monitoring.enum';
import { BreachCheckWebsites } from './breach-check-website.entity';

@Entity('breach_check_results')
@Index(['websiteId', 'checkType', 'timestamp'])
export class BreachCheckResult {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ name: 'website_id' })
  websiteId: number;

  @ManyToOne(() => BreachCheckWebsites, website => website.checkResults, {
    onDelete: 'CASCADE',
  })
  @JoinColumn({ name: 'website_id' })
  website: BreachCheckResult;

  @Column({
    name: 'check_type',
    type: 'enum',
    enum: MonitoringCheckType,
  })
  @Index()
  checkType: MonitoringCheckType;

  @Column({ type: 'timestamp' })
  @Index()
  timestamp: Date;

  @Column({
    type: 'enum',
    enum: ['PASS', 'WARNING', 'FAIL', 'ERROR'],
    default: 'PASS',
  })
  @Index()
  status: string;

  @Column({
    type: 'enum',
    enum: ['INFO', 'LOW', 'MEDIUM', 'HIGH', 'CRITICAL'],
    default: 'INFO',
  })
  @Index()
  severity: string;

  @Column({ type: 'json', nullable: true })
  details: Record<string, any>;

  @Column({ type: 'text', nullable: true })
  rawData: string | null;

  @Column({ name: 'alert_generated', default: false })
  alertGenerated: boolean;

  @Column({ name: 'response_time_ms', type: 'int', nullable: true })
  responseTimeMs: number | null;
}
