from flask import Flask, jsonify, render_template_string
import subprocess
import os
import shutil
from datetime import datetime

app = Flask(__name__)


HTML = """
<!doctype html>
<html>
<head>
<title>Lastcharter Control Center</title>
<meta charset="utf-8">
<style>
body{
font-family:Arial;
background:#111827;
color:#fff;
padding:30px;
}
.card{
background:#1f2937;
padding:20px;
margin:15px;
border-radius:12px;
display:inline-block;
min-width:250px;
}
.ok{
color:#22c55e;
font-size:22px;
}
.warn{
color:#f59e0b;
}
h1{
color:#38bdf8;
}
</style>
</head>

<body>

<h1>🚀 Lastcharter Control Center</h1>

<div id="data">
Loading...
</div>


<script>

async function load(){

let r=await fetch('/api/status');
let d=await r.json();

let html="";

for(let k in d){

html += `
<div class="card">
<h3>${k}</h3>
<div class="ok">${d[k]}</div>
</div>
`;

}

document.getElementById("data").innerHTML=html;

}

load();
setInterval(load,10000);

</script>

</body>
</html>
"""


def cmd(x):
    try:
        return subprocess.check_output(
            x,
            shell=True,
            text=True,
            stderr=subprocess.DEVNULL
        ).strip()
    except:
        return "N/A"



@app.route("/")
def index():
    return render_template_string(HTML)



@app.route("/api/status")
def status():

    bot="DOWN"

    if os.path.exists("/home/lastchar/lastcharter_v14_0_1/bot.pid"):

        pid=open(
        "/home/lastchar/lastcharter_v14_0_1/bot.pid"
        ).read().strip()

        if cmd(f"kill -0 {pid}")=="":
            bot=f"ONLINE PID {pid}"


    v17=cmd(
    "curl -sf --max-time 3 http://127.0.0.1:8787/health"
    )

    contact=cmd(
    "pgrep -f contact_center_api_clean/passenger_wsgi.py"
    )


    disk=cmd(
    "df -h /home/lastchar | awk 'NR==2 {print $5}'"
    )


    mem=cmd(
    "free -m | awk '/Mem:/ {print $7\" MB FREE\"}'"
    )


    backup=cmd(
    "ls -1t /home/lastchar/backups/daily/*.tar.gz 2>/dev/null | head -1"
    )


    return jsonify({

    "BOT":bot,
    "V17": "ONLINE" if v17 else "DOWN",
    "CONTACT_CENTER":"ONLINE" if contact else "DOWN",
    "DISK":disk,
    "MEMORY":mem,
    "LAST_BACKUP":backup.split("/")[-1] if backup else "NONE",
    "TIME":datetime.now().strftime("%Y-%m-%d %H:%M:%S")

    })



if __name__=="__main__":
    app.run(
    host="127.0.0.1",
    port=8899
    )
