package entity

import "github.com/gocql/gocql"

// Room 對應 Cassandra 的 room 表
// Primary Key: (room_id)
// 設計說明：存儲聊天室本身的基本資訊
type Room struct {
	RoomID    gocql.UUID `db:"room_id" partition_key:"true"`
	Name      string     `db:"name"`       // 聊天室名稱
	Status    string     `db:"status"`     // 狀態：active, archived, deleted
	CreatedAt int64      `db:"created_at"` // 創建時間
	UpdatedAt int64      `db:"updated_at"` // 更新時間
}

// TableName 返回表名
func (r Room) TableName() string {
	return "room"
}

// RoomMember 對應 Cassandra 的 room_member 表
// Primary Key: (room_id)
// Clustering Key: uid
// 設計說明：
// - room_id 作為 partition key，可以高效地查詢/刪除整個聊天室的所有成員
// - uid 作為 clustering key，可以高效地查詢/刪除特定成員
// - 支援三種操作：
//  1. 刪除整個聊天室：刪除整個 partition（需要查詢後批量刪除或使用原生 CQL）
//  2. 刪除特定成員：使用 Delete(roomID, uid)
//  3. 查詢聊天室所有成員：使用 Query().Where(Eq("room_id", roomID)).Scan()
type RoomMember struct {
	RoomID   gocql.UUID `db:"room_id" partition_key:"true"`
	UID      string     `db:"uid" clustering_key:"true"`
	Role     string     `db:"role"`      // Role 角色：member（一般成員）、admin（管理員）、owner（擁有者）等
	JoinedAt int64      `db:"joined_at"` // JoinedAt 加入時間（可選，用於記錄加入時間）
}

// TableName 返回表名
func (m RoomMember) TableName() string {
	return "room_member"
}

// UserRoom 對應 Cassandra 的 user_room 表（反向查詢表）
// Primary Key: (uid)
// Clustering Key: room_id
// 設計說明：
// - uid 作為 partition key，可以高效地查詢某個用戶所在的所有聊天室
// - room_id 作為 clustering key，可以高效地查詢/刪除特定關聯
// - 這個表用於支援「查詢用戶在哪些聊天室中」的需求
type UserRoom struct {
	UID      string     `db:"uid" partition_key:"true"`
	RoomID   gocql.UUID `db:"room_id" clustering_key:"true"`
	JoinedAt int64      `db:"joined_at"` // 加入時間
}

// TableName 返回表名
func (u UserRoom) TableName() string {
	return "user_room"
}
