from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from db import get_db
from models import VPNUser, Reseller
from datetime import datetime
import os
from vpn_remote import run_remote_command, download_ovpn

router = APIRouter()

@router.post("/create")
def create_vpn_user(username: str, reseller_username: str, server: str = "vpn1", db: Session = Depends(get_db)):
    existing = db.query(VPNUser).filter(VPNUser.username == username).first()
    if existing:
        raise HTTPException(status_code=400, detail="Utente già esistente")

    reseller = db.query(Reseller).filter(Reseller.username == reseller_username).first()
    if not reseller:
        raise HTTPException(status_code=404, detail="Rivenditore non trovato")

    if reseller.credits <= 0:
        raise HTTPException(status_code=403, detail="Crediti esauriti")

    new_user = VPNUser(username=username, reseller_id=reseller.id, created_at=datetime.utcnow())
    db.add(new_user)
    reseller.credits -= 1
    db.commit()

    try:
        run_remote_command(server, f"./agent.py add {username}")
        run_remote_command(server, f"./agent.py generate {username}")
        msg = download_ovpn(server, username)
    except Exception as e:
        raise HTTPException(status_code=500, detail=f"Errore remoto: {e}")

    return {"status": "ok", "username": username, "file": f"/downloads/{username}.ovpn", "log": msg}
