package chat

import (
	"context"
	"hfb_sys/backend/internal/model"
)

func (r *Repository) UpdateRemark(ctx context.Context, principal Principal, conversationID uint64, remark string) error {
	return r.db.WithContext(ctx).Model(&model.ChatParticipant{}).
		Where("conversation_id = ? AND participant_type = ? AND participant_id = ?", conversationID, principal.Type, principal.ID).
		Update("remark", remark).Error
}
func (r *Repository) ListQuickReplies(ctx context.Context, adminID uint64) ([]QuickReplyDTO, error) {
	var replies []model.ChatQuickReply
	err := r.db.WithContext(ctx).Where("admin_user_id = ? OR admin_user_id = 0", adminID).
		Order("admin_user_id DESC, sort_order ASC, id ASC").
		Find(&replies).Error
	if err != nil {
		return nil, err
	}
	result := make([]QuickReplyDTO, len(replies))
	for i, reply := range replies {
		result[i] = QuickReplyDTO{
			ID:          reply.ID,
			AdminUserID: reply.AdminUserID,
			Title:       reply.Title,
			Content:     reply.Content,
			SortOrder:   reply.SortOrder,
			IsGlobal:    reply.AdminUserID == 0,
		}
	}
	return result, nil
}
func (r *Repository) CreateQuickReply(ctx context.Context, adminID uint64, req CreateQuickReplyRequest) (*QuickReplyDTO, error) {
	ownerID := adminID
	if req.IsGlobal {
		ownerID = 0
	}
	reply := model.ChatQuickReply{
		AdminUserID: ownerID,
		Title:       req.Title,
		Content:     req.Content,
		SortOrder:   req.SortOrder,
	}
	if err := r.db.WithContext(ctx).Create(&reply).Error; err != nil {
		return nil, err
	}
	return &QuickReplyDTO{
		ID:          reply.ID,
		AdminUserID: reply.AdminUserID,
		Title:       reply.Title,
		Content:     reply.Content,
		SortOrder:   reply.SortOrder,
		IsGlobal:    reply.AdminUserID == 0,
	}, nil
}
func (r *Repository) UpdateQuickReply(ctx context.Context, adminID uint64, replyID uint64, req UpdateQuickReplyRequest) error {
	query := r.db.WithContext(ctx).Model(&model.ChatQuickReply{}).Where("id = ? AND (admin_user_id = ? OR admin_user_id = 0)", replyID, adminID)
	updates := map[string]interface{}{}
	if req.Title != "" {
		updates["title"] = req.Title
	}
	if req.Content != "" {
		updates["content"] = req.Content
	}
	if req.SortOrder != nil {
		updates["sort_order"] = *req.SortOrder
	}
	if len(updates) == 0 {
		return nil
	}
	return query.Updates(updates).Error
}
func (r *Repository) DeleteQuickReply(ctx context.Context, adminID uint64, replyID uint64) error {
	return r.db.WithContext(ctx).Where("id = ? AND admin_user_id = ?", replyID, adminID).
		Delete(&model.ChatQuickReply{}).Error
}
func (r *Repository) GetAutoWelcomeMessage(ctx context.Context) string {
	var cfg model.SystemConfig
	if err := r.db.WithContext(ctx).Where("`key` = ?", "chat.auto_welcome_message").First(&cfg).Error; err != nil {
		return "欢迎加入订单群聊！如有任何问题，请随时沟通。"
	}
	return cfg.Value
}
func (r *Repository) UpdateAutoWelcomeMessage(ctx context.Context, message string) error {
	return r.db.WithContext(ctx).Model(&model.SystemConfig{}).
		Where("`key` = ?", "chat.auto_welcome_message").
		Update("value", message).Error
}
