#!/usr/bin/env bash
set -e

PROJECT="adminlte-starter"
echo "Installing $PROJECT (CDN edition)..."

mkdir -p "$PROJECT"
cd "$PROJECT"

echo "Creating directory structure..."
mkdir -p public lib api pages

############################################
# Core.php
############################################
cat > lib/Core.php <<'EOF'
<?php
session_start();
define('DB_HOST','localhost');
define('DB_NAME','adminlte_starter');
define('DB_USER','root');
define('DB_PASS','root');
require __DIR__.'/DB.php';
require __DIR__.'/Auth.php';
EOF

############################################
# DB.php
############################################
cat > lib/DB.php <<'EOF'
<?php
class DB {
    private static ?PDO $pdo = null;
    public static function conn(): PDO {
        if (!self::$pdo) {
            $dsn = "mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=utf8mb4";
            self::$pdo = new PDO($dsn, DB_USER, DB_PASS, [
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
            ]);
        }
        return self::$pdo;
    }
    public static function fetchUserByEmail(string $email): ?array {
        $stmt = self::conn()->prepare("SELECT * FROM users WHERE email=:email LIMIT 1");
        $stmt->execute(['email'=>$email]);
        $row = $stmt->fetch(PDO::FETCH_ASSOC);
        return $row ?: null;
    }
}
EOF

############################################
# Auth.php
############################################
cat > lib/Auth.php <<'EOF'
<?php
class Auth {
    public static function login(string $email,string $password): bool {
        $u = DB::fetchUserByEmail($email);
        if (!$u || !password_verify($password,$u['password_hash'])) return false;
        $_SESSION['user_id']=$u['id'];
        $_SESSION['user_name']=$u['name'];
        return true;
    }
    public static function logout(): void {
        $_SESSION=[];
        session_destroy();
    }
    public static function check(): bool {
        return isset($_SESSION['user_id']);
    }
    public static function requireLogin(): void {
        if (!self::check()) { header("Location: login.php"); exit; }
    }
}
EOF

############################################
# PAGE-top.php (CDN version)
############################################
cat > lib/PAGE-top.php <<'EOF'
<?php require __DIR__.'/Core.php'; Auth::requireLogin(); ?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>AdminLTE Starter</title>

<!-- Bootstrap 5 -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css">

<!-- AdminLTE -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/admin-lte@3.2/dist/css/adminlte.min.css">

<!-- FontAwesome -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css">

</head>
<body class="hold-transition sidebar-mini">
<div class="wrapper">

<nav class="main-header navbar navbar-expand navbar-white navbar-light">
<ul class="navbar-nav">
<li class="nav-item"><a href="index.php" class="nav-link">Dashboard</a></li>
<li class="nav-item"><a href="pages/sample.php" class="nav-link">Sample</a></li>
</ul>
<ul class="navbar-nav ms-auto">
<li class="nav-item"><span class="nav-link"><?=htmlspecialchars($_SESSION['user_name'])?></span></li>
<li class="nav-item"><a href="logout.php" class="nav-link text-danger">Logout</a></li>
</ul>
</nav>

<aside class="main-sidebar sidebar-dark-primary elevation-4">
<a href="index.php" class="brand-link"><span class="brand-text">AdminLTE Starter</span></a>
<div class="sidebar">
<nav class="mt-2"><ul class="nav nav-pills nav-sidebar flex-column">
<li class="nav-item"><a href="index.php" class="nav-link"><i class="nav-icon fas fa-home"></i><p>Dashboard</p></a></li>
<li class="nav-item"><a href="pages/sample.php" class="nav-link"><i class="nav-icon fas fa-file"></i><p>Sample</p></a></li>
</ul></nav>
</div>
</aside>

<div class="content-wrapper">
<section class="content">
<div class="container-fluid">
EOF

############################################
# PAGE-bottom.php (CDN version)
############################################
cat > lib/PAGE-bottom.php <<'EOF'
</div></section></div>

<footer class="main-footer">
<strong>&copy; <?=date('Y')?> AdminLTE Starter</strong>
</footer>

</div>

<!-- jQuery -->
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>

<!-- Bootstrap -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>

<!-- AdminLTE -->
<script src="https://cdn.jsdelivr.net/npm/admin-lte@3.2/dist/js/adminlte.min.js"></script>

<script src="public/admin.js"></script>
</body>
</html>
EOF

############################################
# admin.js
############################################
cat > public/admin.js <<'EOF'
console.log("AdminLTE starter (CDN edition) loaded");
EOF

############################################
# login.php
############################################
cat > login.php <<'EOF'
<?php require __DIR__.'/lib/Core.php';
if (Auth::check()) { header("Location: index.php"); exit; }
$error=null;
if ($_SERVER['REQUEST_METHOD']==='POST') {
    if (Auth::login($_POST['email'],$_POST['password'])) {
        header("Location: index.php"); exit;
    }
    $error="Invalid credentials";
}
?>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/admin-lte@3.2/dist/css/adminlte.min.css">
</head>
<body class="hold-transition login-page">
<div class="login-box"><div class="card card-outline card-primary">
<div class="card-header text-center"><b>AdminLTE</b> Starter</div>
<div class="card-body">
<?php if($error): ?><div class="alert alert-danger"><?=$error?></div><?php endif; ?>
<form method="post">
<input type="email" name="email" class="form-control mb-3" placeholder="Email" required>
<input type="password" name="password" class="form-control mb-3" placeholder="Password" required>
<button class="btn btn-primary btn-block">Sign In</button>
</form>
</div></div></div>
</body></html>
EOF

############################################
# logout.php
############################################
cat > logout.php <<'EOF'
<?php require __DIR__.'/lib/Core.php'; Auth::logout(); header("Location: login.php");
EOF

############################################
# index.php
############################################
cat > index.php <<'EOF'
<?php require __DIR__.'/lib/PAGE-top.php'; ?>
<div class="row">
<div class="col-lg-3 col-6"><div class="small-box bg-info">
<div class="inner"><h3 id="stat-polls">0</h3><p>Polls/sec</p></div>
<div class="icon"><i class="fas fa-chart-line"></i></div></div></div>
<div class="col-lg-3 col-6"><div class="small-box bg-success">
<div class="inner"><h3 id="stat-latency">0</h3><p>Latency</p></div>
<div class="icon"><i class="fas fa-clock"></i></div></div></div>
</div>
<script>
fetch("api/stats.php").then(r=>r.json()).then(d=>{
 if(d.ok){
   document.getElementById("stat-polls").textContent=d.data.polls_per_sec;
   document.getElementById("stat-latency").textContent=d.data.latency_ms;
 }
});
</script>
<?php require __DIR__.'/lib/PAGE-bottom.php'; ?>
EOF

############################################
# sample.php
############################################
cat > pages/sample.php <<'EOF'
<?php require __DIR__.'/../lib/PAGE-top.php'; ?>
<div class="card"><div class="card-header"><h3 class="card-title">Sample Page</h3></div>
<div class="card-body"><p>This is a sample page.</p></div></div>
<?php require __DIR__.'/../lib/PAGE-bottom.php'; ?>
EOF

############################################
# stats API
############################################
cat > api/stats.php <<'EOF'
<?php require __DIR__.'/../lib/Core.php';
header("Content-Type: application/json");
if (!Auth::check()) { http_response_code(401); echo json_encode(['ok'=>false]); exit; }
echo json_encode(['ok'=>true,'data'=>['polls_per_sec'=>42,'latency_ms'=>120]]);
EOF

############################################
# SQL schema
############################################
cat > SQL.sql <<'EOF'
CREATE TABLE users (
 id INT AUTO_INCREMENT PRIMARY KEY,
 email VARCHAR(255) UNIQUE NOT NULL,
 password_hash VARCHAR(255) NOT NULL,
 name VARCHAR(100) NOT NULL,
 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
EOF

echo "CDN-based AdminLTE starter installed in $PROJECT/"

