package domain

import (
	"context"
	"time"

	"github.com/google/uuid"
)

type UsageRecord struct {
	ID             uuid.UUID `json:"id"`
	CompanyID      uuid.UUID `json:"company_id"`
	Year           int       `json:"year"`
	Month          int       `json:"month"`
	CandidatesUsed int       `json:"candidates_used"`
	CreatedAt      time.Time `json:"created_at"`
	UpdatedAt      time.Time `json:"updated_at"`
}

type UsageRecordRepository interface {
	Create(ctx context.Context, record *UsageRecord) error
	GetByID(ctx context.Context, id uuid.UUID) (*UsageRecord, error)
	GetByCompanyAndPeriod(ctx context.Context, companyID uuid.UUID, year, month int) (*UsageRecord, error)
	ListByCompany(ctx context.Context, companyID uuid.UUID) ([]UsageRecord, error)
	Update(ctx context.Context, record *UsageRecord) error
	IncrementUsage(ctx context.Context, companyID uuid.UUID, year, month int, count int) error
}

type UsageRecordUsecase interface {
	GetMonthlyUsage(ctx context.Context, companyID uuid.UUID, year, month int) (*UsageRecord, error)
	TrackUsage(ctx context.Context, companyID uuid.UUID, count int) error
}
