package domain

import (
	"context"
	"time"

	"github.com/google/uuid"
)

type Subscription struct {
	ID        uuid.UUID  `json:"id"`
	CompanyID uuid.UUID  `json:"company_id"`
	PackageID uuid.UUID  `json:"package_id"`
	StartDate time.Time  `json:"start_date"`
	EndDate   time.Time  `json:"end_date"`
	Status    string     `json:"status"` // ACTIVE, INACTIVE
	CreatedAt time.Time  `json:"created_at"`
	UpdatedAt time.Time  `json:"updated_at"`
	DeletedAt *time.Time `json:"deleted_at,omitempty"`
}

type SubscriptionRepository interface {
	Create(ctx context.Context, sub *Subscription) error
	GetActiveByCompanyID(ctx context.Context, companyID uuid.UUID) (*Subscription, error)
	UpdateStatus(ctx context.Context, id uuid.UUID, status string) error
}

type SubscriptionUsecase interface {
	Subscribe(ctx context.Context, companyID, packageID uuid.UUID) (*Subscription, error)
	GetActiveSubscription(ctx context.Context, companyID uuid.UUID) (*Subscription, error)
}
