#!/usr/bin/env python3
"""Connector integration test script."""
import requests as http_req
import json

BASE = 'http://127.0.0.1:5003'

def login():
    s = http_req.Session()
    s.post(f'{BASE}/api/auth/login',
           json={'email': 'grepples15@gmail.com', 'password': 'temp_pw_2026'})
    return s

s = login()

# ========== Webhook tests ==========
print('=== POST /api/connectors/webhooks/angi ===')
r = s.post(f'{BASE}/api/connectors/webhooks/angi',
           json={'lead_id': 'test123', 'data': {'name': 'Test'}},
           headers={'Content-Type': 'application/json'})
print(f'  Status: {r.status_code}')
print(f'  Body: {r.text[:300]}')
print()

print('=== POST /api/connectors/webhooks/zapier ===')
r = s.post(f'{BASE}/api/connectors/webhooks/zapier',
           json={'zap_id': 'test', 'data': {'field': 'value'}},
           headers={'Content-Type': 'application/json'})
print(f'  Status: {r.status_code}')
print(f'  Body: {r.text[:300]}')
print()

print('=== POST /api/connectors/webhooks (generic) ===')
r = s.post(f'{BASE}/api/connectors/webhooks/google_ads',
           json={'test': True},
           headers={'Content-Type': 'application/json'})
print(f'  Status: {r.status_code}')
print(f'  Body: {r.text[:300]}')
print()

# ========== Connector creation tests ==========
print('=== POST /api/connectors (create various) ===')

payload = {
    "service": "servicetitan",
    "config": {"client_id": "test_id", "client_secret": "test_secret"},
    "name": "Test ServiceTitan"
}
r = s.post(f'{BASE}/api/connectors', json=payload)
print(f'  servicetitan create: [{r.status_code}] {json.dumps(r.json())[:200]}')
print()

payload = {
    "service": "facebook_ads",
    "config": {"access_token": "EAABtest123"},
    "name": "Test FB Ads"
}
r = s.post(f'{BASE}/api/connectors', json=payload)
print(f'  facebook_ads create: [{r.status_code}] {json.dumps(r.json())[:200]}')
print()

payload = {
    "service": "jobnimbus",
    "config": {"api_key": "test_api_key"},
    "name": "Test JobNimbus"
}
r = s.post(f'{BASE}/api/connectors', json=payload)
print(f'  jobnimbus create: [{r.status_code}] {json.dumps(r.json())[:200]}')
print()

payload = {
    "service": "generic_rest",
    "config": {"base_url": "https://api.example.com", "auth_type": "bearer", "api_key": "test"},
    "name": "Test Generic REST"
}
r = s.post(f'{BASE}/api/connectors', json=payload)
print(f'  generic_rest create: [{r.status_code}] {json.dumps(r.json())[:200]}')
print()

# ========== List created connectors ==========
print('=== GET /api/connectors (list) ===')
r = s.get(f'{BASE}/api/connectors')
print(f'  Status: {r.status_code}')
data = r.json()
items = data.get('connectors', []) if isinstance(data, dict) else data
print(f'  Count: {len(items)}')
for c in items:
    cid = c.get('id') or c.get('connector_id', '?')
    print(f'    id={cid[:12] if isinstance(cid, str) else cid}  svc={c.get("service","?"):20s} name={c.get("name","?"):20s} status={c.get("status","?")}')
print()

# ========== Status & sync on created connectors ==========
if items:
    cid = items[0].get('id') or items[0].get('connector_id')
    print(f'=== Testing status/sync on connector {cid} ===')
    r = s.get(f'{BASE}/api/connectors/{cid}/status')
    print(f'  Status endpoint: [{r.status_code}] {r.text[:250]}')
    r = s.post(f'{BASE}/api/connectors/{cid}/sync')
    print(f'  Sync endpoint: [{r.status_code}] {r.text[:250]}')
    r = s.post(f'{BASE}/api/connectors/{cid}/refresh')
    print(f'  Refresh endpoint: [{r.status_code}] {r.text[:250]}')

# ========== Error handling: invalid connector ID ==========
print()
print('=== Error handling: invalid connector ID ===')
r = s.get(f'{BASE}/api/connectors/nonexistent-id/status')
print(f'  Status (bad ID): [{r.status_code}] {r.text[:200]}')
r = s.post(f'{BASE}/api/connectors/nonexistent-id/sync')
print(f'  Sync (bad ID): [{r.status_code}] {r.text[:200]}')
r = s.post(f'{BASE}/api/connectors/nonexistent-id/refresh')
print(f'  Refresh (bad ID): [{r.status_code}] {r.text[:200]}')

# ========== Error handling: unauthenticated requests ==========
print()
print('=== Error handling: unauthenticated requests ===')
s2 = http_req.Session()
r = s2.get(f'{BASE}/api/connectors')
print(f'  GET /api/connectors (no auth): [{r.status_code}]')
r = s2.post(f'{BASE}/api/connectors', json={'service': 'test'})
print(f'  POST /api/connectors (no auth): [{r.status_code}]')

print()
print('ALL TESTS COMPLETE')
