import { inject } from '@angular/core'
import { ActivatedRouteSnapshot, CanActivateFn } from '@angular/router'
import { FeatureKey } from '@core/types'
import { isFeatureEnabled } from '@core/utils'
import { DefaultService } from '@api-client/angular'
import { map, take } from 'rxjs'

export const featureAccessGuard: CanActivateFn = (route: ActivatedRouteSnapshot) => {
	const apiService = inject(DefaultService)

	const feature = route.data['featureName'] as FeatureKey
	return apiService.settingsControllerFind().pipe(
		take(1),
		map((settings) => isFeatureEnabled(feature, settings.features)),
	)
}
