#!/usr/bin/env python3
"""
Test Canada Post APIs with extracted credentials
"""

import requests
import json
import sys
import argparse
from datetime import datetime

class CanadaPostAPITester:
    def __init__(self, auth_token=None, api_key=None):
        self.auth_token = auth_token
        self.api_key = api_key
        self.session = requests.Session()
        self.results = []
        
    def test_api(self, method, url, headers=None, data=None):
        """Test a single API endpoint"""
        print(f"\n[*] Testing: {method} {url}")
        
        if headers is None:
            headers = {}
        
        # Add authorization if available
        if self.auth_token:
            headers['Authorization'] = f'Bearer {self.auth_token}'
        
        headers['User-Agent'] = 'Android Canada Post'
        
        try:
            if method.upper() == 'GET':
                response = self.session.get(url, headers=headers, timeout=5, verify=False)
            elif method.upper() == 'POST':
                headers['Content-Type'] = 'application/json'
                response = self.session.post(url, headers=headers, json=data or {}, timeout=5, verify=False)
            else:
                return None
            
            result = {
                "method": method,
                "url": url,
                "status": response.status_code,
                "headers": dict(response.headers),
                "body": response.text[:500] if response.text else ""
            }
            
            self.results.append(result)
            
            print(f"    Status: {response.status_code}")
            if response.text:
                print(f"    Response: {response.text[:200]}")
            
            return result
            
        except Exception as e:
            print(f"    Error: {str(e)}")
            return None
    
    def test_tracking_api(self, tracking_number):
        """Test the tracking API with a package number"""
        # Common tracking API patterns
        endpoints = [
            f"https://mobileintegration.1eqh5zpddmks.us-east.codeengine.appdomain.cloud/api/v1/track/{tracking_number}",
            f"https://q26ff9ws86.execute-api.ca-central-1.amazonaws.com/prod/v1/track/{tracking_number}",
            f"https://canadapost.ca/api/track/{tracking_number}",
            f"https://www.canadapost.ca/api/v1/tracking/{tracking_number}",
        ]
        
        print("\n" + "="*80)
        print(f"  TESTING TRACKING API WITH: {tracking_number}")
        print("="*80)
        
        for endpoint in endpoints:
            self.test_api("GET", endpoint)
    
    def test_auth_endpoints(self):
        """Test authentication endpoints"""
        print("\n" + "="*80)
        print("  TESTING AUTHENTICATION ENDPOINTS")
        print("="*80)
        
        # Test Firebase App Check (from captured traffic)
        self.test_api(
            "POST",
            "https://firebaseappcheck.googleapis.com/v1/projects/canada-post-2dce9/apps/1:741680414261:android:01b8071927083c4626bb7c/exchangeCustomToken",
            data={
                "customToken": "test_token"
            }
        )
        
        # Test subscription endpoint (from traffic, returned 400)
        self.test_api(
            "POST",
            "https://q26ff9ws86.execute-api.ca-central-1.amazonaws.com/prod/v1/subscriptions",
            data={
                "email": "test@example.com"
            }
        )
    
    def test_mobile_integration_api(self):
        """Test mobile integration API"""
        print("\n" + "="*80)
        print("  TESTING MOBILE INTEGRATION API")
        print("="*80)
        
        endpoints = [
            "/api/v1/user/profile",
            "/api/v1/user/settings",
            "/api/v1/shipments",
            "/api/v1/packages",
            "/api/v1/subscriptions",
        ]
        
        base = "https://mobileintegration.1eqh5zpddmks.us-east.codeengine.appdomain.cloud"
        
        for endpoint in endpoints:
            self.test_api("GET", base + endpoint)
    
    def save_results(self, filename="api_test_results.json"):
        """Save test results to file"""
        with open(filename, 'w') as f:
            json.dump({
                "timestamp": datetime.now().isoformat(),
                "results": self.results
            }, f, indent=2)
        print(f"\n[*] Results saved to: {filename}")

# Example usage patterns
if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='Test Canada Post APIs')
    parser.add_argument('--token', help='Bearer token for authentication')
    parser.add_argument('--track', help='Test tracking API with package number')
    parser.add_argument('--auth', action='store_true', help='Test auth endpoints')
    parser.add_argument('--integration', action='store_true', help='Test mobile integration API')
    
    args = parser.parse_args()
    
    tester = CanadaPostAPITester(auth_token=args.token)
    
    if args.track:
        tester.test_tracking_api(args.track)
    elif args.auth:
        tester.test_auth_endpoints()
    elif args.integration:
        tester.test_mobile_integration_api()
    else:
        print("Usage: python test_apis.py --track <package_number>")
        print("       python test_apis.py --auth")
        print("       python test_apis.py --integration")
        print("\nExample: python test_apis.py --track 1234567890")
    
    tester.save_results()
