// Copyright © 2023 OpenIM. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package model

import (
	"time"
)

const (
	MeetingTableName = "meetings"
)

// MeetingStatus 会议状态
const (
	MeetingStatusScheduled = 1 // 已预约
	MeetingStatusOngoing   = 2 // 进行中
	MeetingStatusFinished  = 3 // 已结束
	MeetingStatusCancelled = 4 // 已取消
)

// Meeting 会议表
type Meeting struct {
	MeetingID      string    `bson:"meeting_id"`      // 会议ID（唯一）
	Subject        string    `bson:"subject"`         // 会议主题
	CoverURL       string    `bson:"cover_url"`       // 封面URL
	ScheduledTime  time.Time `bson:"scheduled_time"`  // 预约时间
	Status         int32     `bson:"status"`          // 会议状态：1-已预约，2-进行中，3-已结束，4-已取消
	CreatorUserID  string    `bson:"creator_user_id"` // 创建者用户ID
	Description    string    `bson:"description"`     // 会议描述
	Duration       int32     `bson:"duration"`        // 会议时长（分钟）
	EstimatedCount int32     `bson:"estimated_count"` // 会议预估人数
	EnableMic      bool      `bson:"enable_mic"`      // 是否开启连麦
	EnableComment  bool      `bson:"enable_comment"`  // 是否开启评论
	AnchorUserIDs  []string  `bson:"anchor_user_ids"` // 主播用户ID列表（多选）
	GroupID        string    `bson:"group_id"`        // 关联的群聊ID
	CheckInCount   int32     `bson:"check_in_count"`  // 签到人数统计
	Password       string    `bson:"password"`        // 会议密码（6位数字）
	CreateTime     time.Time `bson:"create_time"`     // 创建时间
	UpdateTime     time.Time `bson:"update_time"`     // 更新时间
	Ex             string    `bson:"ex"`              // 扩展字段
}

func (*Meeting) TableName() string {
	return MeetingTableName
}
