"""
Authentication routes for JWT token management
"""
from flask import Blueprint, request, jsonify, current_app
from flask_jwt_extended import create_access_token, get_jwt_identity, jwt_required, get_jwt
from auth.jwt_auth import authenticate_user, create_user_token, get_current_user
import logging

logger = logging.getLogger(__name__)

# Create blueprint for authentication routes
auth_bp = Blueprint('auth', __name__)

@auth_bp.route('/api/login', methods=['POST'])
def login():
    """Login endpoint to get JWT token"""
    try:
        data = request.get_json()
        
        if not data:
            return jsonify({
                'error': 'Invalid request',
                'message': 'Request body must be JSON'
            }), 400
        
        username = data.get('username')
        password = data.get('password')
        
        if not username or not password:
            return jsonify({
                'error': 'Missing credentials',
                'message': 'Username and password are required'
            }), 400
        
        # Authenticate user
        user = authenticate_user(username, password)
        if not user:
            return jsonify({
                'error': 'Invalid credentials',
                'message': 'Username or password is incorrect'
            }), 401
        
        # Create JWT token
        token = create_user_token(username)
        if not token:
            return jsonify({
                'error': 'Token creation failed',
                'message': 'Could not create authentication token'
            }), 500
        
        logger.info(f"User {username} logged in successfully")
        
        return jsonify({
            'success': True,
            'message': 'Login successful',
            'access_token': token,
            'token_type': 'Bearer',
            'expires_in': current_app.config['JWT_ACCESS_TOKEN_EXPIRES'],
            'user': {
                'username': username
            }
        }), 200
        
    except Exception as e:
        logger.error(f"Login error: {e}")
        return jsonify({
            'error': 'Login failed',
            'message': 'An error occurred during login'
        }), 500

@auth_bp.route('/api/profile', methods=['GET'])
@jwt_required()
def get_profile():
    """Get current user profile"""
    try:
        current_user = get_current_user()
        if not current_user:
            return jsonify({
                'error': 'Authentication required',
                'message': 'Please login to access this resource'
            }), 401
        
        return jsonify({
            'success': True,
            'user': current_user
        }), 200
        
    except Exception as e:
        logger.error(f"Profile error: {e}")
        return jsonify({
            'error': 'Profile retrieval failed',
            'message': 'An error occurred while retrieving profile'
        }), 500


@auth_bp.route('/api/verify', methods=['GET'])
@jwt_required()
def verify_token():
    """Verify if current token is valid"""
    try:
        current_user = get_current_user()
        return jsonify({
            'success': True,
            'message': 'Token is valid',
            'user': current_user
        }), 200
        
    except Exception as e:
        logger.error(f"Token verification error: {e}")
        return jsonify({
            'error': 'Token verification failed',
            'message': 'Token is invalid or expired'
        }), 401
