package repositories

import (
	"context"
	"primesys_email/src/db"
	"primesys_email/src/utils"

	. "primesys_email/src/models/device"

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

const deviceCollection = "devices"

func GetActiveDevices(ctx context.Context, deviceNos []int32, divisionID string) ([]DeviceModel, error) {
	if len(deviceNos) == 0 {
		return []DeviceModel{}, nil
	}

	current := utils.CurrentEpoch()

	pipeline := mongo.Pipeline{
		bson.D{{Key: "$match", Value: bson.D{
			{Key: "device_no", Value: bson.D{
				{Key: "$in", Value: deviceNos},
			}},
			{Key: "division_id", Value: divisionID},
			{Key: "device_payment.expiry_date", Value: bson.D{
				{Key: "$gt", Value: current},
			}},
			{Key: "active_status", Value: true},
			{Key: "report_enable", Value: true},
		}}},
	}

	cursor, err := db.Database().
		Collection(deviceCollection).
		Aggregate(ctx, pipeline)
	if err != nil {
		return nil, err
	}
	defer cursor.Close(ctx)

	var devices []DeviceModel
	if err := cursor.All(ctx, &devices); err != nil {
		return nil, err
	}

	return devices, nil
}
