import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, OneToMany } from 'typeorm';
import { Workspace } from './workspace.entity';

/**
 * User Entity
 * كيان المستخدم
 * 
 * Represents a SaaS user who can connect their Meta Ads accounts.
 * يمثل مستخدم SaaS الذي يمكنه ربط حسابات إعلانات ميتا الخاصة به.
 */
@Entity('users')
/**
 * User Entity: كيان المستخدم
 * يمثل الشخص المشترك في الـ SaaS ويحتوي على بياناته المالية واشتراكه
 */
export class User {
  @PrimaryGeneratedColumn('uuid')
  id: string; // المعرف الفريد للمستخدم

  @Column({ unique: true })
  email: string;

  @Column({ select: false }) // Don't return password by default | لا ترجع كلمة المرور افتراضياً
  passwordHash: string;

  @Column({ default: true })
  isActive: boolean;

  // Subscription Fields | حقول الاشتراك
  @Column({
    type: 'enum',
    enum: ['free', 'pro'],
    default: 'free',
  })
  subscriptionTier: string;

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

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

  @Column({ nullable: true })
  stripeCustomerId: string;

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

  @Column({ default: 0 })
  requestCount: number;

  @Column({ nullable: true })
  fcmToken: string;

  @CreateDateColumn()
  createdAt: Date;

  @UpdateDateColumn()
  updatedAt: Date;

  @OneToMany(() => Workspace, (workspace) => workspace.owner)
  workspaces: Workspace[];
}
