// NG Imports
import { Injectable } from '@angular/core'
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'
import { Observable } from 'rxjs'

// Settings
import { storeGuards, store } from '@k-settings/app-setup'
import { AppHelper } from '@k-settings/app-helper'

@Injectable()
export class StoreGuard implements CanActivate {

	canActivate(
		route: ActivatedRouteSnapshot,
		state: RouterStateSnapshot
	) : Observable<boolean> | Promise<boolean> | boolean {
		
		// Get list of guarded routes
		if(storeGuards && storeGuards.length > 0) {

			// Loop over guards and check if current route in guarded
			for(let guard of storeGuards) {
				if(!!AppHelper[guard.route] && AppHelper[guard.route] === route.url[0].path) {

					// Loop over stores and check if current store matches guarded store
					for(let g_store of guard.stores) {
						if(g_store === store) {
							console.log('GUARDED: the route "' + route.url[0].path + '" is guarded on the store "' + store + '"')

							return false
						}
					}
				}
			}
		}

		// Default
		return true
	}
}