from flask import Flask, render_template, request, jsonify
import os
import subprocess
import signal

app = Flask(__name__)
UPLOAD_FOLDER = os.path.dirname(os.path.abspath(__file__))
PID_FILE = os.path.join(UPLOAD_FOLDER, "bot.pid")
LOG_FILE = os.path.join(UPLOAD_FOLDER, "bot.log")
BOT_SCRIPT = os.path.join(UPLOAD_FOLDER, "main_bot.py")

# পাইথন ইন্টারপ্রেটার পাথ (আপনার venv থাকলে সেটার পাথ দিতে পারেন)
PYTHON_EXEC = "python3" 

def is_running():
    if os.path.exists(PID_FILE):
        with open(PID_FILE, "r") as f:
            pid = f.read().strip()
            if pid and os.path.exists(f"/proc/{pid}"):
                return True, pid
    return False, None

@app.route('/')
def index():
    running, pid = is_running()
    return render_template('index.html', running=running, pid=pid)

@app.route('/upload', methods=['POST'])
def upload_file():
    if 'file' not in request.files:
        return "কোনো ফাইল সিলেক্ট করা হয়নি!", 400
    file = request.files['file']
    if file.filename == '':
        return "ফাইল খালি!", 400
    if file and file.filename.endswith('.py'):
        file.save(BOT_SCRIPT)
        return "ফাইল সফলভাবে আপলোড হয়েছে! এখন Start বাটনে চাপুন।"
    return "শুধুমাত্র .py ফাইল আপলোড করুন!", 400

@app.route('/start', methods=['POST'])
def start_bot():
    running, _ = is_running()
    if running:
        return jsonify({"msg": "বট অলরেডি রানিং আছে!"})
    
    if not os.path.exists(BOT_SCRIPT):
        return jsonify({"msg": "আগে পাইথন ফাইল আপলোড করুন!"}), 400

    # ব্যাকগ্রাউন্ডে বট রান করা
    log_out = open(LOG_FILE, "w")
    process = subprocess.Popen([PYTHON_EXEC, BOT_SCRIPT], stdout=log_out, stderr=subprocess.STDOUT)
    
    with open(PID_FILE, "w") as f:
        f.write(str(process.pid))
        
    return jsonify({"msg": f"বট সফলভাবে চালু হয়েছে! PID: {process.pid}"})

@app.route('/stop', methods=['POST'])
def stop_bot():
    running, pid = is_running()
    if running and pid:
        try:
            os.kill(int(pid), signal.SIGTERM)
            os.remove(PID_FILE)
            return jsonify({"msg": "বট বন্ধ করা হয়েছে!"})
        except Exception as e:
            return jsonify({"msg": f"সমস্যা হয়েছে: {str(e)}"}), 500
    return jsonify({"msg": "বট বর্তমানে বন্ধ আছে!"})

@app.route('/logs')
def get_logs():
    if os.path.exists(LOG_FILE):
        with open(LOG_FILE, "r") as f:
            lines = f.readlines()
            return "".join(lines[-30:]) # শেষ ৩০ লাইনের লগ
    return "কোনো লগ ফাইল নেই!"

if __name__ == '__main__':
    # পোর্ট 5000 এ রান হবে
    app.run(host='0.0.0.0', port=5000)