package setting

import "system-altrak/internal/domain"

type SettingService interface {
	Get(key string) (string, error)
	Set(key, value string) error
	List() ([]domain.SystemSetting, error)
	ListPermissions() ([]domain.RolePermission, error)
	UpdatePermission(role, module string, canView, canCreate, canEdit, canDelete, canExport bool) error
	GetStats() (map[string]interface{}, error)
	OptimizeDB() error
}

type serviceImpl struct {
	repo SettingRepository
}

func NewService(repo SettingRepository) SettingService {
	return &serviceImpl{repo: repo}
}

func (s *serviceImpl) Get(key string) (string, error) {
	set, err := s.repo.Get(key)
	if err != nil {
		return "", err
	}
	return set.Value, nil
}

func (s *serviceImpl) Set(key, value string) error {
	return s.repo.Set(key, value)
}

func (s *serviceImpl) ListPermissions() ([]domain.RolePermission, error) {
	return s.repo.ListPermissions()
}

func (s *serviceImpl) UpdatePermission(role, module string, canView, canCreate, canEdit, canDelete, canExport bool) error {
	return s.repo.UpdatePermission(role, module, canView, canCreate, canEdit, canDelete, canExport)
}

func (s *serviceImpl) List() ([]domain.SystemSetting, error) {
	return s.repo.List()
}
func (s *serviceImpl) GetStats() (map[string]interface{}, error) {
	return s.repo.GetDBStats()
}
func (s *serviceImpl) OptimizeDB() error {
	return s.repo.OptimizeDB()
}

