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

export enum TwilioSmsEventType {
  QUEUED = 'queued',
  SENT = 'sent',
  DELIVERED = 'delivered',
  FAILED = 'failed',
  UNDELIVERED = 'undelivered',
  RECEIVING = 'receiving',
  RECEIVED = 'received',
  READ = 'read',
}

@Entity('twilio_webhook_event')
export class TwilioWebhookEvent {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ type: 'varchar', length: 100, nullable: true })
  @Index()
  messageSid: string;

  @Column({ type: 'varchar', length: 50 })
  event: TwilioSmsEventType;

  @Column({ type: 'varchar', length: 50, nullable: true })
  @Index()
  phoneNumber: string;

  @Column({ type: 'varchar', length: 50, nullable: true })
  accountSid: string;

  @Column({ type: 'varchar', length: 50, nullable: true })
  status: string;

  @Column({ type: 'varchar', length: 50, nullable: true })
  errorCode: string;

  @Column({ type: 'text', nullable: true })
  errorMessage: string;

  @Column({ type: 'varchar', length: 50, nullable: true })
  from: string;

  @Column({ type: 'varchar', length: 50, nullable: true })
  to: string;

  @Column({ type: 'text', nullable: true })
  body: string;

  @Column({ type: 'jsonb', nullable: true })
  rawData: Record<string, unknown>;

  @CreateDateColumn()
  createdAt: Date;
}

