import { Entity, PrimaryGeneratedColumn, Column, ManyToMany, CreateDateColumn, UpdateDateColumn, ManyToOne, JoinColumn } from 'typeorm';
import { Role } from '../../role/entities/role.entity';
import { User } from '../../user/entities/user.entity';
import { ModuleEntity } from '../../modules/entities/module.entity';

@Entity('permissions')
export class Permission {
  @PrimaryGeneratedColumn()
  id: number;

  // Foreign key to module
  @ManyToOne(() => ModuleEntity, { nullable: false })
  @JoinColumn({ name: 'module_id' })
  module: ModuleEntity;

  @Column({ unique: true })
  name: string; // e.g., certificate:view:uuid

  @Column()
  action: string; // e.g., view, create, generate, delete

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

  @CreateDateColumn({ type: 'timestamp' })
  created_at: Date;

  @UpdateDateColumn({ type: 'timestamp' })
  updated_at: Date;

  @ManyToMany(() => Role, (role) => role.permissions)
  roles: Role[];

  @ManyToMany(() => User, (user) => user.permissions)
  users: User[];
}
