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

export type EmailProvider = 'platform' | 'gmail' | 'outlook' | 'yahoo' | 'sendgrid' | 'smtp';

@Entity('user_email_settings')
export class UserEmailSettings {
  @PrimaryColumn({ name: 'user_id', type: 'char', length: 36 })
  userId!: string;

  @Column({ type: 'varchar', length: 32, default: 'platform' })
  provider!: EmailProvider;

  @Column({ name: 'smtp_host', type: 'varchar', length: 255, nullable: true })
  smtpHost!: string | null;

  @Column({ name: 'smtp_port', type: 'int', default: 587 })
  smtpPort!: number;

  @Column({ name: 'smtp_user', type: 'varchar', length: 255, nullable: true })
  smtpUser!: string | null;

  @Column({ name: 'smtp_pass_enc', type: 'text', nullable: true })
  smtpPassEnc!: string | null;

  @Column({ name: 'from_email', type: 'varchar', length: 255, nullable: true })
  fromEmail!: string | null;

  @Column({ name: 'from_name', type: 'varchar', length: 255, nullable: true })
  fromName!: string | null;

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

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

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

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

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

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

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

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

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