import {env} from "../../index";
import API from '../api/service.api';
import {bodyRequestPermission} from '../model/requests/body.request.permission';
import {CanActivate, ExecutionContext, Injectable} from '@nestjs/common';
import {ResponseModel} from "../model/responses/api.response";


@Injectable()
export class AuthGuard implements CanActivate {
    async canActivate(context: ExecutionContext): Promise<boolean> {
        const request = context.switchToHttp().getRequest();
        const path = request.route.path;
        const payload = request.body;
        const token = this.getToken(request);
        if (!token) {
            return false;
        }
        return await this.auth(path, token, payload);

    }

    private async auth(_path: any, token: any, payload: any): Promise<boolean> {
        try{
            const body = {
                pathRouter: _path,
                payload: payload,
            } as bodyRequestPermission;
            const result = await API.postApi(env.PERMISSION_URL, body, token, env.KEY_SERVICE) as ResponseModel;
            console.log(result.data)
            return result.data;
        }catch (e){
            console.log(`[Error] Auth log  : ${e}`)
            return false;
        }

    }

    private getToken(request: any) {
        try {
            return request.headers['authorization'].replace('Bearer ', '');
        } catch (e) {
            return false;
        }
    }
}
