#!/usr/bin/env python
"""
Manual Social Auth Test Script

Bu script ile social authentication'ı test edebilirsiniz.
Gerçek bir access token ile test yapar.
"""
import requests
import json

BASE_URL = "http://localhost:8000/api/v1"

def print_header(title):
    print(f"\n{'='*60}")
    print(f"  {title}")
    print(f"{'='*60}\n")

def print_response(response):
    print(f"Status Code: {response.status_code}")
    try:
        data = response.json()
        print(f"Response:\n{json.dumps(data, indent=2)}")
    except:
        print(f"Response: {response.text}")

def test_google_oauth():
    """
    Google OAuth Test
    
    Gerçek test için:
    1. Google OAuth Playground'a git: https://developers.google.com/oauthplayground/
    2. Scopes seç: 
       - https://www.googleapis.com/auth/userinfo.email
       - https://www.googleapis.com/auth/userinfo.profile
    3. "Authorize APIs" tıkla
    4. Access token'ı kopyala
    5. Aşağıdaki token yerine yapıştır
    """
    print_header("🔵 Google OAuth Test")
    
    # ⚠️ Buraya gerçek Google access token yapıştırın
    access_token = input("Google Access Token girin (veya Enter ile atla): ").strip()
    
    if not access_token:
        print("❌ Access token girilmedi. Atlaniyor...")
        print("\n📝 Google token almak için:")
        print("   1. https://developers.google.com/oauthplayground/")
        print("   2. Settings (sağ üst) → Use your own OAuth credentials")
        print("   3. Client ID: 915364976256-691m0s87as2r5vdbqr96f6humblseobt.apps.googleusercontent.com")
        print("   4. Client Secret: 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")
        print("   5. Scopes: userinfo.email, userinfo.profile")
        print("   6. Authorize APIs → Exchange authorization code for tokens")
        return
    
    try:
        response = requests.post(
            f"{BASE_URL}/auth/social/google-oauth2/",
            json={"access_token": access_token},
            headers={"Content-Type": "application/json"}
        )
        
        print_response(response)
        
        if response.status_code == 200:
            print("\n✅ Google OAuth Başarılı!")
            data = response.json()
            if 'user' in data:
                print(f"\n👤 User: {data['user']['email']}")
                print(f"🔑 Access Token alındı: {data['access'][:50]}...")
        else:
            print("\n❌ Google OAuth Başarısız!")
            
    except requests.exceptions.ConnectionError:
        print("❌ Server'a bağlanılamadı. Server çalışıyor mu?")
        print("   python manage.py runserver")
    except Exception as e:
        print(f"❌ Hata: {e}")

def test_github_oauth():
    """
    GitHub OAuth Test
    
    Gerçek test için:
    1. GitHub'da Personal Access Token oluştur
    2. Scopes: user, user:email
    3. Token'ı aşağıya yapıştır
    """
    print_header("⚫ GitHub OAuth Test")
    
    # ⚠️ Buraya gerçek GitHub access token yapıştırın
    access_token = input("GitHub Access Token girin (veya Enter ile atla): ").strip()
    
    if not access_token:
        print("❌ Access token girilmedi. Atlanıyor...")
        print("\n📝 GitHub token almak için:")
        print("   1. https://github.com/settings/tokens")
        print("   2. Generate new token (classic)")
        print("   3. Scopes: user, user:email")
        print("   4. Token'ı kopyala")
        return
    
    try:
        response = requests.post(
            f"{BASE_URL}/auth/social/github/",
            json={"access_token": access_token},
            headers={"Content-Type": "application/json"}
        )
        
        print_response(response)
        
        if response.status_code == 200:
            print("\n✅ GitHub OAuth Başarılı!")
            data = response.json()
            if 'user' in data:
                print(f"\n👤 User: {data['user']['email']}")
                print(f"🔑 Access Token alındı: {data['access'][:50]}...")
        else:
            print("\n❌ GitHub OAuth Başarısız!")
            
    except requests.exceptions.ConnectionError:
        print("❌ Server'a bağlanılamadı. Server çalışıyor mu?")
        print("   python manage.py runserver")
    except Exception as e:
        print(f"❌ Hata: {e}")

def test_endpoints_available():
    """Check if social auth endpoints are available"""
    print_header("🔍 Endpoint Kontrolü")
    
    try:
        # Test if server is running
        response = requests.get(f"{BASE_URL}/auth/users/")
        print("✅ Server çalışıyor")
        
        # Social auth endpoints don't support GET, so we expect 405
        print("✅ Social auth endpoints hazır")
        
    except requests.exceptions.ConnectionError:
        print("❌ Server çalışmıyor!")
        print("   Çalıştırmak için: python manage.py runserver")
        return False
    except Exception as e:
        print(f"⚠️ Beklenmeyen hata: {e}")
        return False
    
    return True

def main():
    print("\n" + "="*60)
    print("  🔐 Django Social Auth Test Script")
    print("="*60)
    print("\n📝 Bu script ile Google ve GitHub OAuth'u test edebilirsiniz.")
    print("   Real access token'larla çalışır.\n")
    
    # Check if server is running
    if not test_endpoints_available():
        return
    
    while True:
        print("\n" + "-"*60)
        print("Seçenekler:")
        print("  1. Google OAuth Test")
        print("  2. GitHub OAuth Test")
        print("  3. HTML Test Sayfasını Aç")
        print("  4. Çıkış")
        print("-"*60)
        
        choice = input("\nSeçiminiz (1-4): ").strip()
        
        if choice == "1":
            test_google_oauth()
        elif choice == "2":
            test_github_oauth()
        elif choice == "3":
            print("\n📄 HTML test sayfası:")
            print("   file:///home/beyhan/Python/server/templates/test_social_auth.html")
            print("\n   veya tarayıcınızda açın:")
            print("   Dosya → Aç → /home/beyhan/Python/server/templates/test_social_auth.html")
        elif choice == "4":
            print("\n👋 Çıkılıyor...")
            break
        else:
            print("❌ Geçersiz seçim!")

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        print("\n\n👋 Test sonlandırıldı.")

