from flask import Flask, render_template, jsonify, request
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
import random

app = Flask(__name__)
# Konfigurasi Database SQLite
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

# Model Database untuk Domain
class Domain(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    url = db.Column(db.String(100), nullable=False)
    provider = db.Column(db.String(50), default="Cloudflare")
    status = db.Column(db.String(20), default="STANDBY") # ACTIVE, STANDBY, BLOCKED
    isp_status = db.Column(db.String(20), default="CLEAN") # CLEAN, NAWALA
    last_check = db.Column(db.DateTime, default=datetime.utcnow)

# Inisialisasi Database dengan Data Master (Contoh)
with app.app_context():
    db.create_all()
    if not Domain.query.first():
        example_domains = [
            Domain(url="utama-ga.com", status="ACTIVE", isp_status="CLEAN"),
            Domain(url="backup-v1.net", status="STANDBY", isp_status="CLEAN"),
            Domain(url="lama-tumbang.id", status="BLOCKED", isp_status="NAWALA")
        ]
        db.session.bulk_save_objects(example_domains)
        db.session.commit()

# --- ROUTES ---

@app.route('/')
def index():
    # Menampilkan halaman utama dashboard
    return render_template('index.html')

@app.route('/api/domains', methods=['GET'])
def get_domains():
    # API untuk mengambil data domain ke Dashboard
    domains = Domain.query.all()
    output = []
    for d in domains:
        output.append({
            'id': d.id,
            'url': d.url,
            'provider': d.provider,
            'status': d.status,
            'isp_status': d.isp_status,
            'last_check': d.last_check.strftime("%Y-%m-%d %H:%M:%S")
        })
    return jsonify(output)

@app.route('/api/rotate', methods=['POST'])
def rotate_domain():
    # Logika Simulai Rotasi Domain
    # Di sini nantinya kita akan memasukkan API Cloudflare untuk update DNS
    active_now = Domain.query.filter_by(status='ACTIVE').first()
    next_ready = Domain.query.filter_by(status='STANDBY').first()
    
    if active_now and next_ready:
        active_now.status = 'BLOCKED'
        active_now.isp_status = 'NAWALA'
        next_ready.status = 'ACTIVE'
        db.session.commit()
        return jsonify({"message": f"Successfully rotated to {next_ready.url}"})
    
    return jsonify({"message": "No standby domains available!"}), 400

if __name__ == '__main__':
    app.run(debug=True, port=5000)