import {
  Column,
  CreateDateColumn,
  Entity,
  ManyToOne,
  PrimaryGeneratedColumn,
  type Relation,
  Unique,
} from 'typeorm';
import { User } from '../../user/entities/user.entity';
import { Project } from './project.entity';

// 프로젝트 내 권한 역할
export type ProjectRoleType = 'admin' | 'member';

// 프로젝트 멤버 (Project ↔ User 조인 + 역할). 권한·담당자 풀의 기준 단위.
@Entity('project_members')
@Unique(['project', 'user'])
export class ProjectMember {
  @PrimaryGeneratedColumn('uuid')
  id!: string;

  // 소속 프로젝트 (프로젝트 삭제 시 함께 삭제)
  @ManyToOne(() => Project, (project) => project.members, {
    onDelete: 'CASCADE',
  })
  project!: Relation<Project>;

  // 멤버 사용자 (사용자 삭제 시 함께 삭제) — 관계는 호출부에서 명시적으로 로딩
  @ManyToOne(() => User, { onDelete: 'CASCADE' })
  user!: User;

  // 권한 역할 (admin: 프로젝트 관리, member: 일반)
  @Column({ name: 'role_type', type: 'varchar', default: 'member' })
  roleType!: ProjectRoleType;

  // 소유자 여부(프로젝트 생성자) — 역할 변경/제거 불가, 프로젝트 삭제 권한
  @Column({ name: 'is_owner', default: false })
  isOwner!: boolean;

  @CreateDateColumn({ name: 'created_at' })
  createdAt!: Date;
}
