package services

import (
	"fmt"

	"git.solsynth.dev/hypernet/interactive/pkg/internal/database"
	"git.solsynth.dev/hypernet/interactive/pkg/internal/models"
)

func NewFlag(post models.Post, account uint) (models.PostFlag, error) {
	var flag models.PostFlag
	if err := database.C.Where("post_id = ? AND account_id = ?", post.ID, account).Error; err == nil {
		return flag, fmt.Errorf("flag already exists")
	}
	flag = models.PostFlag{
		PostID:    post.ID,
		AccountID: account,
	}
	if err := database.C.Save(&flag).Error; err != nil {
		return flag, err
	}
	if err := FlagCalculateCollapseStatus(post); err != nil {
		return flag, err
	}
	return flag, nil
}

func FlagCalculateCollapseStatus(post models.Post) error {
	collapseLimit := 0.5

	var flagCount int64
	if err := database.C.Model(&models.PostFlag{}).Where("post_id = ?", post.ID).Count(&flagCount).Error; err != nil {
		return err
	}
	if float64(flagCount)/float64(post.TotalViews) >= collapseLimit {
		return database.C.Model(&post).Update("is_collapsed", true).Error
	}
	return nil
}