package usecase

import (
	"context"
	"errors"
	"lune/talentscale/internal/domain"
	"time"

	"github.com/google/uuid"
)

type permissionUsecase struct {
	repo domain.PermissionRepository
}

func NewPermissionUsecase(repo domain.PermissionRepository) domain.PermissionUsecase {
	return &permissionUsecase{repo: repo}
}

func (u *permissionUsecase) CreatePermission(ctx context.Context, p *domain.Permission) error {
	p.ID = uuid.New()
	p.CreatedAt = time.Now()
	p.UpdatedAt = time.Now()
	return u.repo.Create(ctx, p)
}

func (u *permissionUsecase) GetPermissionByID(ctx context.Context, id uuid.UUID) (*domain.Permission, error) {
	return u.repo.GetByID(ctx, id)
}

func (u *permissionUsecase) ListPermissions(ctx context.Context, limit, offset int) ([]domain.Permission, error) {
	if limit <= 0 { limit = 10 }
	return u.repo.List(ctx, limit, offset)
}

func (u *permissionUsecase) UpdatePermission(ctx context.Context, id uuid.UUID, p *domain.Permission) error {
	existing, err := u.repo.GetByID(ctx, id)
	if err != nil {
		return errors.New("permission not found")
	}
	existing.Name = p.Name
	existing.Description = p.Description
	return u.repo.Update(ctx, existing)
}

func (u *permissionUsecase) DeletePermission(ctx context.Context, id uuid.UUID) error {
	return u.repo.Delete(ctx, id)
}
