#!/usr/bin/env python3
"""
Simple test script to verify token refresh functionality
"""
import asyncio
import httpx
import json

async def test_token_refresh():
    base_url = "http://sf_api:8000"
    
    print("1. Logging in as tester_pro@profibot.hu...")
    async with httpx.AsyncClient(timeout=30.0) as client:
        # Login
        login_data = {
            "username": "tester_pro@profibot.hu",
            "password": "Password123!"
        }
        
        try:
            resp = await client.post(
                f"{base_url}/api/v1/auth/login",
                data=login_data
            )
            resp.raise_for_status()
            login_result = resp.json()
            initial_token = login_result["access_token"]
            print(f"✓ Initial token obtained: {initial_token[:50]}...")
        except Exception as e:
            print(f"Login failed: {e}")
            return
        
        # Test switching to personal mode
        print("\n2. Switching to personal mode (organization_id = null)...")
        headers = {"Authorization": f"Bearer {initial_token}", "Content-Type": "application/json"}
        patch_data = {"organization_id": None}
        
        try:
            resp = await client.patch(
                f"{base_url}/api/v1/users/me/active-organization",
                json=patch_data,
                headers=headers
            )
            resp.raise_for_status()
            patch_result = resp.json()
            new_token = patch_result["access_token"]
            user_data = patch_result["user"]
            print(f"✓ New token received: {new_token[:50]}...")
            print(f"✓ User scope_id: {user_data.get('scope_id')}")
            print(f"✓ Token type: {patch_result.get('token_type')}")
            
            if new_token != initial_token:
                print("✓ Token refreshed successfully (tokens are different)")
            else:
                print("⚠️ Token not refreshed (tokens are the same)")
                
            # Decode token to verify scope_id in payload
            import jwt
            from app.core.config import settings
            try:
                payload = jwt.decode(new_token, settings.SECRET_KEY, algorithms=[settings.ALGORITHM])
                print(f"✓ Token payload scope_id: {payload.get('scope_id')}")
                print(f"✓ Token payload scope_level: {payload.get('scope_level')}")
            except:
                print("⚠️ Could not decode token")
                
        except Exception as e:
            print(f"PATCH failed: {e}")
            if hasattr(e, 'response'):
                try:
                    print(f"Response status: {e.response.status_code}")
                    print(f"Response text: {e.response.text}")
                except:
                    pass
            return
        
        print("\n=== TEST COMPLETED SUCCESSFULLY ===")
        return True

if __name__ == "__main__":
    success = asyncio.run(test_token_refresh())
    exit(0 if success else 1)