from flask import Flask, jsonify, render_template_string, request, redirect, session
import os
import subprocess
import psutil
from datetime import datetime

app = Flask(__name__)
app.secret_key = "LASTCHARTER_CONTROL_SECRET"

PASSWORD = os.environ.get("LC_ADMIN_PASSWORD","lastchar123")

BASE="/home/lastchar"

HTML="""
<!doctype html>
<html>
<head>
<title>Lastcharter Control Center</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<style>
body{
background:#0f172a;
color:white;
font-family:tahoma;
padding:25px;
}
h1{color:#38bdf8}
.card{
background:#1e293b;
border-radius:15px;
padding:20px;
margin:10px;
display:inline-block;
min-width:240px;
box-shadow:0 5px 20px #0005;
}
.ok{color:#22c55e;font-size:22px}
.bad{color:#ef4444;font-size:22px}
button{
background:#0284c7;
border:0;
color:white;
padding:10px 20px;
border-radius:8px;
cursor:pointer;
}
pre{
background:#020617;
padding:15px;
border-radius:10px;
overflow:auto;
}
</style>
</head>

<body>

<h1>🚀 Lastcharter Control Center V2</h1>

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

<h2>System</h2>
<div id="system"></div>

<h2>Actions</h2>

<button onclick="action('restart_bot')">
Restart Bot
</button>

<button onclick="action('backup')">
Create Backup
</button>

<h2>Recovery Log</h2>
<pre id="log"></pre>


<script>

async function load(){

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

let h="";

for(let x in d.services){

h+=`
<div class="card">
<h3>${x}</h3>
<div class="${d.services[x]=='OK'?'ok':'bad'}">
${d.services[x]}
</div>
</div>`;
}

document.getElementById("status").innerHTML=h;


document.getElementById("system").innerHTML=
`
<div class="card">
CPU ${d.system.cpu}%
</div>

<div class="card">
RAM ${d.system.ram}%
</div>

<div class="card">
DISK ${d.system.disk}%
</div>
`;


document.getElementById("log").innerText=d.log;

}


async function action(a){

await fetch('/api/action/'+a);

alert("DONE");

load();

}

load();

setInterval(load,10000);

</script>

</body>
</html>
"""


def check_service(name):

    if name=="BOT":

        p="/home/lastchar/lastcharter_v14_0_1/bot.pid"

        if os.path.exists(p):

            pid=open(p).read().strip()

            if psutil.pid_exists(int(pid)):
                return "OK"

        return "DOWN"


    if name=="V17":

        try:
            subprocess.check_output(
            "curl -sf http://127.0.0.1:8787/health",
            shell=True)
            return "OK"
        except:
            return "DOWN"


    if name=="CONTACT CENTER":

        try:
            subprocess.check_output(
            "pgrep -f contact_center_api_clean/passenger_wsgi.py",
            shell=True)
            return "OK"
        except:
            return "DOWN"



@app.route("/")
def home():

    if not session.get("login"):
        return redirect("/login")

    return render_template_string(HTML)



@app.route("/login",methods=["GET","POST"])
def login():

    if request.method=="POST":

        if request.form.get("password")==PASSWORD:

            session["login"]=True
            return redirect("/")

    return """
    <form method=post style="margin:50px">
    <h2>Lastcharter Login</h2>
    <input name=password type=password>
    <button>Login</button>
    </form>
    """



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

    return jsonify({

    "services":{
        "BOT":check_service("BOT"),
        "V17":check_service("V17"),
        "CONTACT CENTER":check_service("CONTACT CENTER")
    },

    "system":{
        "cpu":psutil.cpu_percent(),
        "ram":psutil.virtual_memory().percent,
        "disk":psutil.disk_usage("/home/lastchar").percent
    },

    "log":
    open(BASE+"/monitoring/recovery.log").read()[-3000:]
    if os.path.exists(BASE+"/monitoring/recovery.log")
    else ""

    })



@app.route("/api/action/<name>")
def action(name):

    if name=="restart_bot":

        subprocess.Popen(
        "cd /home/lastchar/lastcharter_v14_0_1 && ./stop_bot.sh && ./start_bot.sh",
        shell=True)

    if name=="backup":

        subprocess.Popen(
        "/home/lastchar/monitoring/backup_manager.sh",
        shell=True)

    return "OK"



if __name__=="__main__":

    app.run(
    host="127.0.0.1",
    port=8899)

