package com.dacrt.SBIABackend.security.jwt;


import java.sql.Date;


import com.dacrt.SBIABackend.security.entity.UsuarioPrincipal;

import io.jsonwebtoken.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component;

@Component
@Configuration
public class JwtProvider {
	private final static Logger logger= LoggerFactory.getLogger(JwtProvider.class);
	
	@Value("${jwt.secret}")
	private String secret;
	
	@Value("${jwt.expiration}")
	private int expiration;
	
	public String generateToken(Authentication authentication) {
		UsuarioPrincipal usuarioPrincipal=(UsuarioPrincipal) authentication.getPrincipal();
		
		return Jwts.builder().setSubject(usuarioPrincipal.getUsername()).
				setIssuedAt(new java.util.Date()).
				setExpiration(new java.util.Date(new java.util.Date().getTime() + expiration * 1000)).
				signWith(SignatureAlgorithm.HS256, secret).compact();
				//signWith(SignatureAlgorithm.HS512, secret).compact();	

	}
	
	public String generateTokenoaauth(String users) {
		//UsuarioPrincipal usuarioPrincipal=(UsuarioPrincipal) authentication.getPrincipal();
		
		return Jwts.builder().setSubject(users).
				setIssuedAt(new java.util.Date()).
				setExpiration(new java.util.Date(new java.util.Date().getTime() + expiration * 1000)).
				signWith(SignatureAlgorithm.HS256, secret).compact();
				//signWith(SignatureAlgorithm.HS512, secret).compact();	

	}
	
	public String getUsuarioFromToken(String token) {
		return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody().getSubject();
		
	}
	
	public boolean validateToken(String token) {
		try {
			Jwts.parser().setSigningKey(secret).parseClaimsJws(token);
            return true;
		}catch(MalformedJwtException e){
			logger.error("token mal formado");
		}catch(UnsupportedJwtException e){
			logger.error("token no soportado" + e.getMessage());
		}catch(ExpiredJwtException e){
			logger.error("token expirado");
		}catch(IllegalArgumentException e){
			logger.error("token vacio");
		}catch(SignatureException e){
			logger.error("fail en la firma");
		}
		
		return false;
		
	} 
	
	
	
	
}
