#!/usr/bin/env python3
"""
🌀 VORTEX SEO ENGINE - PYTHON AUTOMATION CLI
Otomasi Pembuatan Subdomain, Audit SEO, dan Pemicu Pengindeksan Google/Bing via Python.
"""

import sys
import json
import argparse
import urllib.request
import urllib.error
import urllib.parse
from datetime import datetime

# Enforce UTF-8 on Windows terminal to support emojis without crash
if hasattr(sys.stdout, 'reconfigure'):
    try:
        sys.stdout.reconfigure(encoding='utf-8', errors='replace')
    except Exception:
        pass
if hasattr(sys.stderr, 'reconfigure'):
    try:
        sys.stderr.reconfigure(encoding='utf-8', errors='replace')
    except Exception:
        pass


# Default configuration
DEFAULT_PANEL_URL = "https://upseocoding.cc.cd"
DEFAULT_DOMAIN = "upseocoding.cc.cd"

def print_banner():
    banner = """
===================================================================
   🌀 VORTEX SEO ENGINE & AUTO SUBDOMAIN GENERATOR (PYTHON CLI)
   Sistem Otomasi Subdomain & Dominasi Pencarian Google
===================================================================
"""
    print(banner)

def api_request(url, data=None, method="GET"):
    headers = {
        "User-Agent": "Vortex-Python-CLI/2.0",
        "Content-Type": "application/json"
    }
    encoded_data = json.dumps(data).encode("utf-8") if data else None
    req = urllib.request.Request(url, data=encoded_data, headers=headers, method=method)
    
    # Ignore self-signed cert validation if needed
    import ssl
    ctx = ssl.create_default_context()
    ctx.check_hostname = False
    ctx.verify_mode = ssl.CERT_NONE

    try:
        with urllib.request.urlopen(req, context=ctx, timeout=30) as response:
            res_body = response.read().decode("utf-8")
            return json.loads(res_body)
    except urllib.error.HTTPError as e:
        err_body = e.read().decode("utf-8")
        try:
            return json.loads(err_body)
        except Exception:
            return {"error": f"HTTP {e.code}: {e.reason}"}
    except Exception as e:
        return {"error": str(e)}

def check_dns(panel_url, domain):
    print(f"[*] 🔍 Memeriksa status DNS Wildcard untuk {domain}...")
    url = f"{panel_url}/api/check-dns?domain={urllib.parse.quote(domain)}"
    res = api_request(url)
    
    if res.get("success"):
        server_ip = res.get("serverIp", "46.250.225.144")
        root_match = res.get("root", {}).get("isMatch", False)
        wild_match = res.get("wildcard", {}).get("isMatch", False)
        
        print(f"    - IP VPS Target       : {server_ip}")
        print(f"    - Domain Utama (@)    : {'🟢 TERHUBUNG' if root_match else '🟡 MENUNGGU / CEK IP'}")
        print(f"    - Wildcard Subdomain  : {'🟢 AKTIF OTOMATIS' if wild_match else '🟡 PERLU RECORD * DI DNSHE/DNS'}")
        if not wild_match:
            print(f"    👉 Info: Pastikan Record A: '*' -> {server_ip} sudah disimpan di DNS.")
    else:
        print(f"    [!] Peringatan DNS: {res.get('error')}")
    print()

def get_vortex_recommendations(panel_url, keyword, domain):
    print(f"[*] 🌀 Menganalisis variasi kata kunci Google dengan Vortex AI...")
    url = f"{panel_url}/api/vortex-recommendations"
    res = api_request(url, {"keyword": keyword, "domain": domain}, method="POST")
    if res.get("success"):
        recs = res.get("recommendations", [])
        print(f"    [+] Ditemukan {len(recs)} variasi search intent:")
        for r in recs[:5]:
            print(f"        - {r['keyword']} (Subdomain: {r['subdomain']}.{domain})")
        return recs
    return []

def generate_website_batch(panel_url, brand, target_url, keywords, domain):
    print(f"\n[*] ⚡ Membangun dan menerbitkan subdomain untuk Brand '{brand}'...")
    
    # Buat template banner responsive berkualitas jika script custom kosong
    auto_script = f"""
    <div style="background: linear-gradient(135deg, #0f172a, #1e293b); border: 1px solid rgba(56,189,248,0.3); border-radius: 16px; padding: 32px 24px; text-align: center; margin: 20px 0; box-shadow: 0 10px 30px rgba(0,0,0,0.5);">
        <div style="display: inline-block; background: rgba(56,189,248,0.15); border: 1px solid #38bdf8; color: #38bdf8; padding: 4px 14px; border-radius: 9999px; font-size: 0.85rem; font-weight: 700; margin-bottom: 16px;">
            🌀 PORTAL RESMI TERVERIFIKASI
        </div>
        <h1 style="color: #ffffff; font-size: 2.2rem; font-weight: 800; margin-bottom: 12px; letter-spacing: -0.02em;">
            {brand} - AKSES LANGSUNG TERPERCAYA
        </h1>
        <p style="color: #94a3b8; font-size: 1.05rem; max-width: 600px; margin: 0 auto 24px auto; line-height: 1.6;">
            Selamat datang di pusat layanan resmi {brand}. Dapatkan koneksi berkecepatan tinggi, keamanan SSL 256-bit, dan akses tanpa pemblokiran.
        </p>
        <div style="display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; margin-bottom: 24px;">
            <a href="{target_url}" target="_blank" style="background: linear-gradient(135deg, #10b981, #059669); color: #ffffff; text-decoration: none; padding: 14px 32px; border-radius: 10px; font-weight: 700; font-size: 1.05rem; box-shadow: 0 4px 14px rgba(16,185,129,0.4); display: inline-flex; align-items: center; gap: 8px;">
                🌀 DAFTAR RESMI
            </a>
            <a href="{target_url}" target="_blank" style="background: linear-gradient(135deg, #2563eb, #1d4ed8); color: #ffffff; text-decoration: none; padding: 14px 32px; border-radius: 10px; font-weight: 700; font-size: 1.05rem; box-shadow: 0 4px 14px rgba(37,99,235,0.4); display: inline-flex; align-items: center; gap: 8px;">
                🌀 LOGIN RESMI
            </a>
        </div>
        <div style="display: flex; gap: 20px; justify-content: center; color: #64748b; font-size: 0.85rem; flex-wrap: wrap;">
            <span>🌀 Lisensi Resmi</span>
            <span>🌀 Bebas Blokir</span>
            <span>🌀 Layanan 24/7</span>
        </div>
    </div>
    """

    payload = {
        "keywords": keywords,
        "customScript": auto_script,
        "domain": domain,
        "autoSubPages": True,
        "urlMode": "subdomain"
    }

    url = f"{panel_url}/api/generate-bulk"
    res = api_request(url, payload, method="POST")

    if "error" in res:
        print(f"[!] GAGAL MEMBUAT BATCH: {res['error']}")
        return None

    print(f"\n[+] 🎉 BATCH BERHASIL DIBUAT DENGAN SUKSES!")
    print(f"    - Batch ID      : {res.get('batchId')}")
    print(f"    - Total Halaman : {res.get('totalPages')} Halaman Subdomain")
    print(f"    - Rata-Rata SEO : {res.get('averageScore')}/100")
    print(f"\n[+] DAFTAR LINK LIVE SUBDOMAIN:")
    pages = res.get("pages", [])
    for p in pages:
        print(f"    🌐 [{p['score']}/100] {p['keyword']:<35} -> {p['liveUrl']}")

    # Ping sitemap otomatis
    print(f"\n[*] 📡 Mengirim sinyal sitemap master ke Google & Bing...")
    ping_res = api_request(f"{panel_url}/api/ping-sitemap", {"domain": domain}, method="POST")
    if ping_res.get("success"):
        print("    [+] Sinyal Sitemap diterima oleh Google & Bing.")

    return res

def main():
    print_banner()
    parser = argparse.ArgumentParser(description="Vortex SEO Engine CLI Automation")
    parser.add_argument("--brand", help="Nama Brand / Game / Situs (contoh: KOLONI4D)")
    parser.add_argument("--target", help="Link Tujuan Daftar/Login (contoh: https://upseocoding.cc.cd/)")
    parser.add_argument("--keyword", help="Kata kunci target utama (contoh: koloni4d link slot terbaru)")
    parser.add_argument("--panel", default=DEFAULT_PANEL_URL, help="URL Panel VPS")
    parser.add_argument("--domain", default=DEFAULT_DOMAIN, help="Domain Utama VPS")
    args = parser.parse_args()

    brand = args.brand
    target = args.target
    keyword = args.keyword

    # Mode interaktif jika parameter tidak diberikan via CLI
    if not brand:
        brand = input("👉 Masukkan Nama Brand / Judul (Wajib diisi, misal: KOLONI4D): ").strip()
        if not brand:
            print("❌ Nama Brand wajib di-setup terlebih dahulu.")
            sys.exit(1)
            
    if not target:
        target = input("👉 Masukkan Link Tujuan Daftar / Login (Wajib diisi diawali https://): ").strip()
        if not target or not target.startswith("http"):
            print("❌ Link Tujuan tombol wajib diisi dengan benar.")
            sys.exit(1)

    if not keyword:
        keyword = input("👉 Masukkan 1 Kata Kunci Utama (Wajib diisi): ").strip()
        if not keyword:
            print("❌ Kata Kunci target wajib diisi untuk proses generate.")
            sys.exit(1)

    # Step 1: Cek DNS Status
    check_dns(args.panel, args.domain)

    # Step 2: Ambil Rekomendasi Vortex AI
    recs = get_vortex_recommendations(args.panel, keyword, args.domain)
    keywords_list = [r["keyword"] for r in recs] if recs else [keyword]

    # Step 3: Eksekusi Batch Pembuatan Subdomain
    generate_website_batch(args.panel, brand, target, keywords_list, args.domain)

    print("\n" + "="*65)
    print("   ✅ PROSES OTOMASI SELESAI! SEMUA SUBDOMAIN TELAH AKTIF.")
    print("="*65 + "\n")

if __name__ == "__main__":
    main()
