package checkpoint

import (
	"context"
)

// NextGenCheckpoint provides checkpoint management for NextGen metering and reporting
type NextGenCheckpoint interface {
	// GetCheckpoint retrieves the checkpoint for a specific task (legacy timestamp-only)
	GetCheckpoint(ctx context.Context, taskName string) (int64, error)

	// SaveCheckpoint saves the checkpoint for a specific task (legacy timestamp-only)
	SaveCheckpoint(ctx context.Context, taskName string, checkpoint int64) error

	// GetCheckpointData retrieves full checkpoint data including Delta Lake information
	GetCheckpointData(ctx context.Context, taskName string) (*CheckpointData, error)

	// SaveCheckpointData saves full checkpoint data including Delta Lake information
	SaveCheckpointData(ctx context.Context, data *CheckpointData) error
}

// CheckpointData represents the structure of checkpoint data
type CheckpointData struct {
	Checkpoint        int64  `json:"checkpoint" yaml:"checkpoint"`               // Legacy timestamp checkpoint
	UpdatedAt         int64  `json:"updatedAt" yaml:"updatedAt"`                 // When this checkpoint was saved
	TaskName          string `json:"taskName" yaml:"taskName"`                   // Name of the task
	DeltaTablePath    string `json:"deltaTablePath" yaml:"deltaTablePath"`       // Delta Lake table path
	DeltaTableVersion int64  `json:"deltaTableVersion" yaml:"deltaTableVersion"` // Delta Lake table version when checkpoint was saved
}
