package repositories

import (
	"context"
	"errors"
	"primesys_email/src/db"
	. "primesys_email/src/models/division"

	"go.mongodb.org/mongo-driver/v2/bson"
	"go.mongodb.org/mongo-driver/v2/mongo"
	"go.mongodb.org/mongo-driver/v2/mongo/options"
)

const divisionReportLogCollection = "division_report_log"

// GetDivisionReportLog returns the latest ACTIVE report of the division for the device type and date,
// nil when no report exists.
func GetDivisionReportLog(ctx context.Context, divisionID string, deviceTypeID int32, reportDate int64) (*DivisionReportLog, error) {

	filter := bson.M{
		"division_id":    divisionID,
		"device_type_id": deviceTypeID,
		"report_date":    reportDate,
		"status":         "ACTIVE",
	}

	opts := options.FindOne().SetSort(bson.D{{Key: "generated_at", Value: -1}})

	var reportLog DivisionReportLog

	err := db.Database().Collection(divisionReportLogCollection).FindOne(ctx, filter, opts).Decode(&reportLog)
	if err != nil {
		if errors.Is(err, mongo.ErrNoDocuments) {
			return nil, nil
		}
		return nil, err
	}

	return &reportLog, nil
}
