package domain

import (
	"context"
	"time"

	"github.com/google/uuid"
)

type Company struct {
	ID        uuid.UUID  `json:"id"`
	Name      string     `json:"name"`
	Address   string     `json:"address"`
	Email     string     `json:"email"`
	Phone     string     `json:"phone"`
	TaxNumber string     `json:"tax_number"`
	PackageID *uuid.UUID `json:"package_id"`
	Industry  string     `json:"industry"`
	Status    string     `json:"status"` // ACTIVE | INACTIVE | SUSPENDED
	CreatedAt time.Time  `json:"created_at"`
	UpdatedAt time.Time  `json:"updated_at"`
	DeletedAt *time.Time `json:"deleted_at,omitempty"`
}

type CompanyRepository interface {
	Create(ctx context.Context, company *Company) error
	GetByID(ctx context.Context, id uuid.UUID) (*Company, error)
	List(ctx context.Context) ([]Company, error)
	Update(ctx context.Context, company *Company) error
	UpdateStatus(ctx context.Context, id uuid.UUID, status string) error
	Delete(ctx context.Context, id uuid.UUID) error
}

type CompanyUsecase interface {
	RegisterCompany(ctx context.Context, company *Company) error
	GetCompanyByID(ctx context.Context, id uuid.UUID) (*Company, error)
	GetAllCompanies(ctx context.Context) ([]Company, error)
	UpdateCompany(ctx context.Context, id uuid.UUID, company *Company) error
	SuspendCompany(ctx context.Context, id uuid.UUID) error
	ActivateCompany(ctx context.Context, id uuid.UUID) error
	DeleteCompany(ctx context.Context, id uuid.UUID) error
}
