import { Request, Response, NextFunction } from "express";
import { extractTokenContent, response } from "../helpers/misc";
import {  RESPONSE_TYPE } from "../helpers/customTypes";

import {AuthLogin} from "../controllers/login" 
import { MyHttpRequest } from "../types";

function extractTokenFromHeader(header: string | undefined): string[] | undefined {
    if (header == undefined) {
      return undefined;
    }
    
    const parts = header.split(' ');
    if (parts.length === 3 && parts[0] === 'Bearer') {

        // console.log({part1: parts[1], part2: parts[2] })
      return [parts[1], parts[2] ] ;
    }
    
    return undefined;
  }
   
 export const isTokenCorrect = (req: MyHttpRequest, res: Response, next: NextFunction)=>{

    const authHeader = req.headers.authorization;
     const tokenData = extractTokenFromHeader(authHeader);
     // console.log({authHeader, tokenData})

  if (tokenData != undefined) {
     let token = tokenData[0];
// get token

extractTokenContent(token as string, req.body.jk)
.then((verified: RESPONSE_TYPE)=>{
    console.log({verified, data:  verified.data[0]})
    delete req.body.jk ;
let {id,
    email ,
    time  ,
    role
} = verified.data[0];

let user_id = tokenData[1]

console.log({token, user_id})
if(id != user_id){
    let error: RESPONSE_TYPE ={
        data: [],
        message: "invalid login token.",
        status: 400,
        statusCode: "LOGIN_FAILED"
    }
    console.log({error})
    response(res, error);
    return

}


AuthLogin.isUserLoggedIn(id, token as string, req.body.UserLoginRecord )
.then((success: any)=>{
    delete req.body.UserLoginRecord ;
if(success.statusCode=="LOGIN_SUCCESSFUL"){

    req.user_id = id;
    req.user_email = email;
    req.user_token = token;
    req.role = role;
    next();
}
else{
    response(res, success);
    return;    
}
})
.catch((err: any)=>{
   delete req.body.UserLoginRecord ;
    response(res, err);
    return;
})



})
.catch((err: RESPONSE_TYPE)=>{
    console.log({err})
    delete req.body.jk ;
    response(res, err);
    return;
})


    }
    else{
        let error: RESPONSE_TYPE ={
            data: [],
            message: "invalid login token.",
            status: 400,
            statusCode: "LOGIN_FAILED"
        }
        console.log({error})
        response(res, error);
        return
    }
    
 }

   
 export const isCompany = (req: MyHttpRequest, res: Response, next: NextFunction)=>{

   console.log({role: req.role})
  if (req.role?.toLowerCase() == "company") {
  
next();
    }
    else{
        let error: RESPONSE_TYPE ={
            data: [],
            message: "access denied.",

            status: 403,
            statusCode: "LOGIN_FAILED"
        }
        
        response(res, error);
        return
    }
    
 }



 export const isTalent = (req: MyHttpRequest, res: Response, next: NextFunction)=>{

   
    if (req.role?.toLowerCase() == "talent") {
    
  next();
      }
      else{
          let error: RESPONSE_TYPE ={
              data: [],
              message: "access denied.",
  
              status: 403,
              statusCode: "LOGIN_FAILED"
          }
          
          response(res, error);
          return
      }
      
   }
  
  
  
  
