from flask import Flask, render_template, request, jsonify, redirect, url_for
from proxmoxer import ProxmoxAPI
import random

app = Flask(__name__)

# Kết nối Proxmox VE bằng tài khoản root trực tiếp (Chắc chắn thành công)
PROXMOX_HOST = "172.16.200.10"

proxmox = ProxmoxAPI(
    PROXMOX_HOST, 
    user='apiuser@pve', 
    password='Bul150694a@#',  # Thay chữ này bằng mật khẩu đăng nhập Proxmox thực tế của bạn
    verify_ssl=False
)

NODE_NAME = "home"

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/dashboard')
def dashboard():
    # Lấy danh sách LXC/VM đang chạy trên node để hiển thị cho khách
    try:
        containers = proxmox.nodes(NODE_NAME).lxc.get()
        return render_template('dashboard.html', containers=containers)
    except Exception as e:
        return f"Lỗi kết nối Proxmox: {e}"

# API nhận lệnh tạo VPS/LXC khi thanh toán thành công
@app.route('/api/create-vps', methods=['POST'])
def create_vps():
    data = request.json
    hostname = data.get('hostname', 'vps-khach')
    password = data.get('password', 'MatKhauMacDinh123')
    
    # Tạo vmid ngẫu nhiên từ 100 đến 999
    vmid = random.randint(150, 999)
    
    try:
        # Gọi Proxmox API tạo LXC Container
        task = proxmox.nodes(NODE_NAME).lxc.create(
            vmid=vmid,
            ostemplate='local:vztmpl/debian-13-standard_13.6-1_amd64.tar.zst',
            storage='home',
            rootfs='home:10',
            memory=1024,
            cores=1,
            hostname=hostname,
            password=password,
            ostype='unmanaged',
            net0='name=eth0,bridge=vmbr0,firewall=1,ip=dhcp',
            start=1
        )
        return jsonify({"status": "success", "vmid": vmid, "task": task})
    except Exception as e:
        return jsonify({"status": "error", "message": str(e)}), 500

# API Điều khiển nguồn (Start / Stop / Reboot)
@app.route('/api/vps-action', methods=['POST'])
def vps_action():
    data = request.json
    vmid = data.get('vmid')
    action = data.get('action') # start, stop, reboot
    
    try:
        if action == 'start':
            proxmox.nodes(NODE_NAME).lxc(vmid).status.start.post()
        elif action == 'stop':
            proxmox.nodes(NODE_NAME).lxc(vmid).status.stop.post()
        elif action == 'reboot':
            proxmox.nodes(NODE_NAME).lxc(vmid).status.reboot.post()
            
        return jsonify({"status": "success", "action": action, "vmid": vmid})
    except Exception as e:
        return jsonify({"status": "error", "message": str(e)}), 500

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)