package scanner_tasks

import (
	"github.com/photoview/photoview/api/graphql/models"
	"github.com/photoview/photoview/api/scanner/face_detection"
	"github.com/photoview/photoview/api/scanner/media_encoding"
	"github.com/photoview/photoview/api/scanner/scanner_task"
	"github.com/photoview/photoview/api/scanner/scanner_utils"
)

type FaceDetectionTask struct {
	scanner_task.ScannerTaskBase
}

func (t FaceDetectionTask) AfterProcessMedia(ctx scanner_task.TaskContext, mediaData *media_encoding.EncodeMediaData,
	updatedURLs []*models.MediaURL, mediaIndex int, mediaTotal int) error {

	didProcess := len(updatedURLs) > 0

	if didProcess && mediaData.Media.Type == models.MediaTypePhoto {
		go func(media *models.Media) {
			if face_detection.GlobalFaceDetector == nil {
				return
			}
			if err := face_detection.GlobalFaceDetector.DetectFaces(ctx.GetDB(), media); err != nil {
				scanner_utils.ScannerError("Error detecting faces in image (%s): %s", media.Path, err)
			}
		}(mediaData.Media)
	}

	return nil
}
