import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, ManyToOne, JoinColumn } from 'typeorm';
import { User } from '../../users/entities/user.entity';
import { Workspace } from '../../users/entities/workspace.entity';

/**
 * Connected Account Entity
 * كيان الحساب المرتبط
 * 
 * Stores the connection between a SaaS user and an ad platform (Meta, TikTok, Google).
 * يخزن الربط بين مستخدم SaaS ومنصة إعلانية (ميتا، تيك توك، جوجل).
 */
@Entity('connected_accounts')
/**
 * ConnectedAccount Entity: كيان الحساب المرتبط
 * يخزن بيانات الربط مع أي منصة إعلانية (ميتا، تيك توك، جوجل)
 */
export class ConnectedAccount {
  @PrimaryGeneratedColumn('uuid')
  id: string; // المعرف الفريد للربط

  @Column()
  name: string; // User-defined name for this account | اسم معرف من قبل المستخدم لهذا الحساب

  @Column({
    type: 'enum',
    enum: ['meta', 'tiktok', 'google'],
    default: 'meta',
  })
  platform: string;

  @Column({ nullable: true })
  externalAdAccountId: string; // The platform-specific ID (e.g., act_XXXX for Meta)

  @Column({ type: 'jsonb', nullable: true })
  credentials: Record<string, any>; // Stores tokens, secrets, etc. | يخزن التوكنات، الأسرار، إلخ

  @Column({ nullable: true })
  accessToken: string; // Common field for most platforms

  @Column({ type: 'timestamp', nullable: true })
  expiresAt: Date;

  @ManyToOne(() => User, { onDelete: 'CASCADE' })
  @JoinColumn({ name: 'userId' })
  user: User;

  @Column()
  userId: string;

  @ManyToOne(() => Workspace, (workspace) => workspace.accounts, { nullable: true })
  workspace: Workspace;

  @CreateDateColumn()
  createdAt: Date;

  @UpdateDateColumn()
  updatedAt: Date;
}
