// src/app/auth/role-guard.service.ts
import { Injectable } from '@angular/core';
import {
    Router,
    CanActivate,
    ActivatedRouteSnapshot
} from '@angular/router';
import { AuthService } from './auth.service';
import {MessageService} from 'primeng/api';

@Injectable()
export class PermissionGuardService implements CanActivate {
    constructor(public auth: AuthService, public router: Router, 
        public messageService: MessageService) { }
    canActivate(route: ActivatedRouteSnapshot): boolean {
        // this will be passed from the route config
        // on the data property
        const expectedpermission: string[] = route.data.expectedPermission;
        //const token = localStorage.getItem('token');
        // decode the token to get its payload
        //const tokenPayload = decode(token);
        // alert(JSON.stringify(this.auth.getPermissions()));
        // alert(JSON.stringify(this));
        var permissionmatch: boolean = false;
       var permissionarray:string[] = this.auth.getPermissions();
    //    console.log(permissionarray);
// alert(JSON.stringify(permissionarray));
       for (let x in expectedpermission) {
            // alert(expectedpermission[x]);
            try {
                //var roleexist = rolearray.find(role => expectedRole[x] == role);
               var r:string = expectedpermission[x].toString();
                 if (permissionarray.find(s => s.toUpperCase() === r.toUpperCase()))
               //(permissionarray.indexOf(expectedpermission[x]) >= 0)
                // if (permissionarray.indexOf(expectedpermission[x]) > -1)
    
               {
                    permissionmatch = true;
                    break;
                }
            }
            catch (error) {
                // alert(error);
            }
        }

        if (
            !this.auth.isLoggedIn() ||
            !permissionmatch

        ) {
            // alert("No Permission!");
            this.messageService.add({severity:'error', summary:'Authorization', detail:'No Permission'});
            this.router.navigate(['/']);
            return false;
        }
        return true;
    }
}
