import requests
import re
import os
import sys

BASE = 'https://dexshellx.com'
USERNAME = 'slex'
PASSWORD = 'pppp0000'
APK_PATH = r'c:\Users\SONAM\Desktop\slex code\protectionphp\demo.apk'
FILTERS  = 'teacher.slex.aaa'

HEADERS = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36',
    'Accept-Language': 'en-US,en;q=0.9',
}

s = requests.Session()
s.headers.update(HEADERS)
s.verify = False  # skip SSL issues

print("="*60)
print("STEP 1: Homepage")
r1 = s.get(BASE + '/', timeout=30)
print(f"  Status: {r1.status_code} | URL: {r1.url}")
print(f"  Cookies: {dict(s.cookies)}")

print("\nSTEP 2: Login page")
r_lp = s.get(BASE + '/dex/login', timeout=30)
print(f"  Status: {r_lp.status_code}")

print("\nSTEP 3: POST login")
r2 = s.post(BASE + '/dex/login',
    data={'user': USERNAME, 'pass': PASSWORD, 'language': 'en_US'},
    headers={'Referer': BASE + '/dex/login', 'Origin': BASE},
    timeout=30, allow_redirects=True
)
print(f"  Status: {r2.status_code} | Final URL: {r2.url}")
login_ok = 'dashboard' in r2.url
print(f"  Login OK: {login_ok}")
if not login_ok:
    print("  LOGIN FAILED! Aborting.")
    sys.exit(1)

print("\nSTEP 4: Upload APK")
print(f"  File: {APK_PATH}")
print(f"  Size: {os.path.getsize(APK_PATH)/1024:.1f} KB")

upload_url = BASE + '/dex/protection/options'
with open(APK_PATH, 'rb') as f:
    files = {
        'apkFile': ('demo.apk', f, 'application/vnd.android.package-archive')
    }
    data = {
        'mode': 'standard', 'userModeValue': 'false', 'signatureAlias': 'android',
        'stringFilters': FILTERS, 'hideFilters': FILTERS, 'classFilters': FILTERS,
        'optimize': 'on', 'stripLogging': 'on', 'crashHandler': 'on',
        'webViewSupport': 'on', 'manifestMangling': 'on',
        'assets': 'on', 'res': 'on', 'nameObf': 'on', 'root': 'on', 'strings': 'on',
        'annotationEnc': 'on', 'stringEnc': 'on', 'hideAccess': 'on', 'classEnc': 'on',
        'jniObf': 'on', 'nativeLib': 'on', 'antiEmulator': 'on', 'antiXposed': 'on'
    }
    upload_headers = {
        'Origin': BASE,
        'Referer': BASE + '/dex/protection/options?mode=standard'
    }
    print("  Uploading... (this may take 1-2 min)")
    r3 = s.post(upload_url, files=files, data=data, headers=upload_headers, timeout=300)

print(f"\n  Upload Status: {r3.status_code}")
print(f"  Final URL after upload: {r3.url}")
print(f"  Content-Type: {r3.headers.get('Content-Type','?')}")
print(f"  Response size: {len(r3.text)} chars")

# Save full response
out_html = r'c:\Users\SONAM\Desktop\slex code\protectionphp\python_bot\manual_test_upload.html'
with open(out_html, 'w', encoding='utf-8', errors='replace') as f:
    f.write(r3.text)
print(f"\n  Full response saved: {out_html}")

# Extract process ID
pid = None
checks = [
    ('URL redirect', re.search(r'process/detail\?id=(\d+)', r3.url)),
    ('data-process-id attr', re.search(r'data-process-id=["\']?(\d+)', r3.text)),
    ('<h1> tag', re.search(r'<h1>Process\s*<code>([\d,]+)', r3.text)),
    ('title tag', re.search(r'<title>Process\s+([\d,]+)', r3.text)),
    ('any href /download', re.search(r'process/download\?id=(\d+)', r3.text)),
]
print("\nSTEP 5: Looking for Process ID...")
for name, m in checks:
    if m:
        pid = m.group(1).replace(',','')
        print(f"  [FOUND via {name}]: {pid}")
        break
    else:
        print(f"  [miss] {name}")

if not pid:
    print("\n  !! Process ID NOT found !!")
    print("  First 500 chars of response:")
    print(r3.text[:500])
else:
    print(f"\n  SUCCESS! Process ID = {pid}")
    print(f"  Poll URL: {BASE}/dex/process/detail/data?id={pid}")
