package repository

import (
	"context"
	"dataservices/commons/errs"
	"dataservices/internal/entity"
	"time"
)

func CreateDataAppAccessRecord(ctx context.Context, record *entity.DataAppAccessIPRecord) error {
	err := MustFromContext(ctx).Table(entity.TableDataAppAccessIPRecord).Create(record).Error
	if err != nil {
		return errs.WrapGORMError(err, "failed to create dataapp access record")
	}
	return nil
}

func CountDistinctAccessIP(ctx context.Context, appId uint64, from, to int64) (int64, error) {
	var cnt int64
	err := MustFromContext(ctx).Table(entity.TableDataAppAccessIPRecord).
		Where("dataapp_id=? AND access_time>=? AND access_time<=?", appId, from, to).
		Distinct("ipv4").
		Count(&cnt).Error
	if err != nil {
		return 0, errs.WrapGORMError(err, "failed to CountDistinctAccessIP")
	}
	return cnt, nil
}

func RemoveObsoleteAccessRecord(ctx context.Context) error {
	return MustFromContext(ctx).Table(entity.TableDataAppAccessIPRecord).
		Where("access_time<?", time.Now().Add(-30*24*time.Hour).Unix()).
		Delete(&entity.DataAppAccessIPRecord{}).Error
}
