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

export type EmbedDisplayMode = 'inline' | 'popup' | 'modal';

export interface EmbedTheme {
  primaryColor?: string;
  backgroundColor?: string;
  fontFamily?: string;
  borderRadius?: string;
}

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

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

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

  @Column({ name: 'embed_key', length: 64, unique: true })
  embedKey!: string;

  @Column({
    name: 'display_mode',
    type: 'enum',
    enum: ['inline', 'popup', 'modal'],
    default: 'inline',
  })
  displayMode!: EmbedDisplayMode;

  @Column({ type: 'json', default: () => "'{}'" })
  theme!: EmbedTheme;

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

  @Column({ name: 'hide_branding', type: 'tinyint', width: 1, default: 0 })
  hideBranding!: boolean;

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

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

  @UpdateDateColumn({ name: 'updated_at', type: 'datetime', precision: 3 })
  updatedAt!: Date;

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

  @ManyToOne(() => EventType, (et) => et.embedConfigs, { onDelete: 'CASCADE' })
  @JoinColumn({ name: 'event_type_id' })
  eventType!: EventType;
}
