#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
================================================================================
ASTRAMENTALICA v111.0 – INSTALACIJSKI SKRIPT
================================================================================
📅 Datum: 29.5.2026
🐍 Python: 3.8+
📦 Namestitev: python3 install_astra.py

Opis: Skript ustvari celotno strukturo ASTRAMENTALICA sistema z vsemi datotekami.
      Prva se ustvari ASTRA (admin svet), nato ostali sloji po vrsti.
================================================================================
"""

import os
import sys
import json
import shutil
from pathlib import Path
from datetime import datetime

# ============================================================================
# KONFIGURACIJA
# ============================================================================

ROOT = Path.cwd()  # Trenutna mapa (kjer poženemo skripto)
TIMESTAMP = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
LOG_FILE = ROOT / f"install_log_{TIMESTAMP}.txt"

# Barve za izpis (če je terminal)
try:
    from colorama import init, Fore, Style
    init()
    GREEN = Fore.GREEN
    YELLOW = Fore.YELLOW
    RED = Fore.RED
    BLUE = Fore.BLUE
    MAGENTA = Fore.MAGENTA
    CYAN = Fore.CYAN
    RESET = Style.RESET_ALL
except ImportError:
    GREEN = YELLOW = RED = BLUE = MAGENTA = CYAN = RESET = ""

# ============================================================================
# POMOŽNE FUNKCIJE
# ============================================================================

def log(msg, level="INFO"):
    """Zapis v log datoteko in izpis na zaslon"""
    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    log_msg = f"[{timestamp}] [{level}] {msg}"
    
    with open(LOG_FILE, "a", encoding="utf-8") as f:
        f.write(log_msg + "\n")
    
    if level == "ERROR":
        print(f"{RED}{msg}{RESET}")
    elif level == "SUCCESS":
        print(f"{GREEN}{msg}{RESET}")
    elif level == "WARNING":
        print(f"{YELLOW}{msg}{RESET}")
    elif level == "INFO":
        print(f"{BLUE}{msg}{RESET}")
    else:
        print(msg)

def create_file(path, content):
    """Ustvari datoteko z vsebino"""
    full_path = ROOT / path
    full_path.parent.mkdir(parents=True, exist_ok=True)
    
    with open(full_path, "w", encoding="utf-8") as f:
        f.write(content)
    
    log(f"✅ Ustvarjeno: {path}", "SUCCESS")
    return True

def create_folder(path):
    """Ustvari mapo"""
    full_path = ROOT / path
    full_path.mkdir(parents=True, exist_ok=True)
    log(f"📁 Ustvarjena mapa: {path}", "INFO")

def check_php():
    """Preveri ali je PHP nameščen"""
    import subprocess
    try:
        result = subprocess.run(["php", "-v"], capture_output=True, text=True)
        if result.returncode == 0:
            log(f"PHP nameščen: {result.stdout.split()[1]}", "SUCCESS")
            return True
    except FileNotFoundError:
        log("PHP ni nameščen! Namestite PHP 8.1+ za delovanje sistema.", "WARNING")
        return False
    return False

# ============================================================================
# 1. ROOT DATOTEKE (SIDRO)
# ============================================================================

def install_root():
    """Ustvari ROOT datoteke"""
    log("\n" + "="*80, "INFO")
    log("📁 1. USTVARJAM ROOT DATOTEKE", "INFO")
    log("="*80, "INFO")
    
    # pot.php
    pot_php = '''<?php
/**
 * ============================================================
 * POT: pot.php
 * VERZIJA: v111.0 (ZAKLJENENO)
 * ============================================================
 * 📦 NAMEN:
 *     SIDRO – EDINA definicija poti do vseh map.
 * ============================================================
 */
declare(strict_types=1);
define('ROOT', __DIR__);
define('POT_KOREN', ROOT);
define('POT_ADAPTER', ROOT . '/ADAPTER');
define('POT_SISTEM', ROOT . '/SISTEM');
define('POT_GLOBALNO', ROOT . '/GLOBALNO');
define('POT_MODULI', ROOT . '/MODULI');
define('POT_UPORABNIKI', ROOT . '/UPORABNIKI');
define('POT_PODATKI', ROOT . '/PODATKI');
define('POT_VSEBINA', ROOT . '/VSEBINA');
define('POT_ASTRA', ROOT . '/ASTRA');
define('POT_KERNEL', POT_SISTEM . '/kernel');
define('POT_RUNTIME', POT_SISTEM . '/runtime');
define('POT_STORITVE', POT_SISTEM . '/storitve_svetov');
define('POT_ADMINISTRACIJA', POT_SISTEM . '/administracija');
define('JE_CLI', php_sapi_name() === 'cli');
define('RAZVOJNI_NACIN', true);
define('SISTEM_VERZIJA', '111.0');
define('IME_APLIKACIJE', 'AstraMentalica');
define('CASOVNA_CONA', 'Europe/Ljubljana');
date_default_timezone_set(CASOVNA_CONA);
define('VLOGA_GOST', 0);
define('VLOGA_S0', 10);
define('VLOGA_S1', 20);
define('VLOGA_S2', 30);
define('VLOGA_S3', 40);
define('VLOGA_S4', 50);
define('VLOGA_S5', 60);
define('VLOGA_ADMIN', 100);
function je_razvoj(): bool { return RAZVOJNI_NACIN === true; }
function je_produkcija(): bool { return !je_razvoj(); }
function je_debug(): bool { return RAZVOJNI_NACIN === true; }
function je_cli(): bool { return JE_CLI; }
spl_autoload_register(function (string $razred): void {
    $predpona = 'AstraMentalica\\\\';
    if (strncmp($predpona, $razred, strlen($predpona)) !== 0) return;
    $relativni = substr($razred, strlen($predpona));
    $relativna_pot = str_replace('\\\\', '/', $relativni);
    $ime = basename($relativna_pot);
    $mozne_poti = [
        POT_RUNTIME . '/' . $relativna_pot . '.php',
        POT_KERNEL . '/' . $relativna_pot . '.php',
        POT_KERNEL_JEDRO . '/' . $ime . '.php',
        POT_STORITVE . '/uporabniki/' . $ime . '.php',
        POT_KOREN . '/' . $relativna_pot . '.php',
    ];
    foreach ($mozne_poti as $pot) {
        if (file_exists($pot)) { require_once $pot; return; }
    }
});
define('SISTEM_VARNOST', true);
'''
    create_file("pot.php", pot_php)
    
    # index.php
    index_php = '''<?php
declare(strict_types=1);
require_once __DIR__ . '/pot.php';
require_once POT_ADAPTER . '/adapter.php';
adapter_zagon();
'''
    create_file("index.php", index_php)
    
    # api.php
    api_php = '''<?php
declare(strict_types=1);
require_once __DIR__ . '/pot.php';
$GLOBALS['ADAPTER_FORCIRANI_KANAL'] = 'api';
require_once POT_ADAPTER . '/adapter.php';
adapter_zagon();
'''
    create_file("api.php", api_php)
    
    # cli.php
    cli_php = '''<?php
declare(strict_types=1);
require_once __DIR__ . '/pot.php';
if (!JE_CLI) die("Samo iz CLI.\\\\n");
$GLOBALS['ADAPTER_FORCIRANI_KANAL'] = 'cli';
require_once POT_ADAPTER . '/adapter.php';
adapter_zagon();
'''
    create_file("cli.php", cli_php)
    
    # .htaccess
    htaccess = '''Options -Indexes
RedirectMatch 403 ^/ADAPTER/.*$
RedirectMatch 403 ^/SISTEM/.*$
RedirectMatch 403 ^/PODATKI/.*$
RedirectMatch 403 ^/ASTRA/.*$
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^ index.php [L]
</IfModule>
'''
    create_file(".htaccess", htaccess)

# ============================================================================
# 2. ASTRA/ – ADMIN WORLD (PRVA)
# ============================================================================

def install_astra():
    """Ustvari ASTRA/ (admin svet) – PRVI, ker je najpomembnejši"""
    log("\n" + "="*80, "INFO")
    log("🟡 2. USTVARJAM ASTRA/ (ADMIN WORLD)", "INFO")
    log("="*80, "INFO")
    
    # ASTRA/auth/prijava.php
    prijava_php = '''<?php
session_start();
$napaka = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $uporabniskoIme = $_POST['uporabnisko_ime'] ?? '';
    $geslo = $_POST['geslo'] ?? '';
    $adminIme = getenv('ASTRA_ADMIN_UPORABNISKO_IME') ?: 'admin';
    $adminGeslo = getenv('ASTRA_ADMIN_GESLO') ?: 'admin2024';
    if ($uporabniskoIme === $adminIme && password_verify($geslo, password_hash($adminGeslo, PASSWORD_DEFAULT))) {
        $_SESSION['astra_uporabnik'] = ['id' => 1, 'ime' => 'Administrator', 'vloga' => 100, 'prijavljen_od' => time()];
        header('Location: ?svet=ASTRA&pot=nadzorna_plosca');
        exit;
    } else { $napaka = 'Napačno uporabniško ime ali geslo.'; }
}
?>
<!DOCTYPE html>
<html lang="sl">
<head><meta charset="UTF-8"><title>ASTRA Prijava</title>
<style>
body{background:#0a0a1a;color:#d4c5a9;font-family:system-ui;display:flex;justify-content:center;align-items:center;min-height:100vh}
.prijava{background:rgba(255,255,255,0.05);border-radius:20px;padding:2rem;width:100%;max-width:400px}
h1{color:#e8c84a;text-align:center}
input{width:100%;padding:0.75rem;background:rgba(255,255,255,0.1);border:1px solid #2a2a4a;border-radius:8px;color:#d4c5a9;margin-bottom:1rem}
.gumb{width:100%;padding:0.75rem;background:#e8c84a;border:none;border-radius:8px;color:#0a0a1a;cursor:pointer}
.napaka{color:#f44336;margin-bottom:1rem}
</style>
</head>
<body>
<div class="prijava">
<h1>🔐 ASTRA Prijava</h1>
<?php if($napaka):?><div class="napaka"><?=htmlspecialchars($napaka)?></div><?php endif;?>
<form method="post">
<input type="text" name="uporabnisko_ime" placeholder="Uporabniško ime" required>
<input type="password" name="geslo" placeholder="Geslo" required>
<button type="submit" class="gumb">Prijava</button>
</form>
</div>
</body>
</html>
'''
    create_file("ASTRA/auth/prijava.php", prijava_php)
    
    # ASTRA/auth/odjava.php
    odjava_php = '''<?php
session_start();
session_destroy();
header('Location: ?svet=ASTRA&pot=prijava');
exit;
'''
    create_file("ASTRA/auth/odjava.php", odjava_php)
    
    # ASTRA/portali/nadzorna_plosca.php
    nadzorna_php = '''<?php
session_start();
if (!isset($_SESSION['astra_uporabnik']) || $_SESSION['astra_uporabnik']['vloga'] < 100) {
    header('Location: ?svet=ASTRA&pot=prijava');
    exit;
}
$uporabnik = $_SESSION['astra_uporabnik'];
?>
<!DOCTYPE html>
<html lang="sl">
<head><meta charset="UTF-8"><title>ASTRA Nadzorna plošča</title>
<style>
*{margin:0;padding:0;box-sizing:border-box}
body{background:#0a0a1a;color:#d4c5a9;font-family:system-ui}
.glava{background:#1a1a2e;padding:1rem 2rem;display:flex;justify-content:space-between}
.logotip{color:#e8c84a;font-size:1.5rem}
.vsebina{padding:2rem;max-width:1200px;margin:0 auto}
h1{margin-bottom:2rem}
.mreza{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1.5rem}
.kartica{background:rgba(255,255,255,0.03);border-radius:15px;padding:1.5rem}
.kartica h3{color:#e8c84a;margin-bottom:0.5rem}
.kartica p{color:#aaa;margin-bottom:1rem}
.gumb{display:inline-block;padding:0.5rem 1rem;background:rgba(232,200,74,0.1);border:1px solid #e8c84a;border-radius:8px;color:#e8c84a;text-decoration:none}
</style>
</head>
<body>
<div class="glava"><div class="logotip">🛠️ ASTRA Admin</div><div>👤 <?=htmlspecialchars($uporabnik['ime'])?> <a href="?svet=ASTRA&pot=odjava" style="color:#f44336;margin-left:1rem">Odjava</a></div></div>
<div class="vsebina">
<h1>📊 Nadzorna plošča</h1>
<div class="mreza">
<div class="kartica"><h3>📦 Moduli</h3><p>Upravljanje modulov</p><a href="?svet=ASTRA&pot=moduli" class="gumb">Upravljaj</a></div>
<div class="kartica"><h3>👤 Uporabniki</h3><p>Upravljanje uporabnikov</p><a href="?svet=ASTRA&pot=uporabniki" class="gumb">Upravljaj</a></div>
<div class="kartica"><h3>⚙️ Nastavitve</h3><p>Sistemske nastavitve</p><a href="?svet=ASTRA&pot=nastavitve" class="gumb">Nastavitve</a></div>
<div class="kartica"><h3>📝 Dnevniki</h3><p>Pregled dnevnikov</p><a href="?svet=ASTRA&pot=dnevniki" class="gumb">Preglej</a></div>
<div class="kartica"><h3>🧹 Cache</h3><p>Počisti predpomnilnik</p><button class="gumb" id="pocistiCache">Počisti</button></div>
<div class="kartica"><h3>🤖 AI Importer</h3><p>Uvoz datotek</p><a href="?svet=ASTRA&pot=importer" class="gumb">Odpri</a></div>
</div>
</div>
<script>document.getElementById('pocistiCache')?.addEventListener('click',async()=>{await fetch('api.php?akcija=admin_cache_pocisti',{method:'POST'});location.reload();});</script>
</body>
</html>
'''
    create_file("ASTRA/portali/nadzorna_plosca.php", nadzorna_php)
    
    # ASTRA/orodja/razvoj/importer.php
    importer_php = '''<?php
session_start();
if (!isset($_SESSION['astra_uporabnik']) || $_SESSION['astra_uporabnik']['vloga'] < 100) {
    header('Location: ?svet=ASTRA&pot=prijava');
    exit;
}
$sporocilo = '';
$napaka = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['vsebina'])) {
    $vsebina = $_POST['vsebina'];
    $vzorec = '/=== POT: ([^\\s]+) ===\\s*\\n```(?:php|javascript|css|json|apache)?\\s*\\n(.*?)\\n```/s';
    preg_match_all($vzorec, $vsebina, $matches);
    $stevec = 0;
    for ($i = 0; $i < count($matches[0]); $i++) {
        $pot = trim($matches[1][$i]);
        $koda = trim($matches[2][$i]);
        $mapa = dirname($pot);
        if (!is_dir($mapa)) mkdir($mapa, 0755, true);
        if (file_exists($pot)) {
            $info = pathinfo($pot);
            $stevilka = 1;
            while (file_exists($info['dirname'] . '/' . $info['filename'] . '_' . $stevilka . '.' . ($info['extension'] ?? ''))) $stevilka++;
            $pot = $info['dirname'] . '/' . $info['filename'] . '_' . $stevilka . '.' . ($info['extension'] ?? '');
        }
        file_put_contents($pot, $koda);
        $stevec++;
    }
    $sporocilo = "Uvoženih $stevec datotek.";
}
$uporabnik = $_SESSION['astra_uporabnik'];
?>
<!DOCTYPE html>
<html lang="sl">
<head><meta charset="UTF-8"><title>AI Importer | ASTRA</title>
<style>
*{margin:0;padding:0;box-sizing:border-box}
body{background:#0a0a1a;color:#d4c5a9;font-family:system-ui}
.glava{background:#1a1a2e;padding:1rem 2rem;display:flex;justify-content:space-between}
.vsebina{padding:2rem;max-width:1200px;margin:0 auto}
textarea{width:100%;height:500px;background:#0a0a1a;border:1px solid #2a2a4a;border-radius:10px;color:#d4c5a9;padding:1rem;font-family:monospace}
.gumb{padding:0.5rem 1rem;background:#e8c84a;border:none;border-radius:8px;color:#0a0a1a;cursor:pointer;margin-top:1rem}
.sporocilo{background:rgba(76,175,80,0.2);padding:0.75rem;border-radius:8px;margin-bottom:1rem}
</style>
</head>
<body>
<div class="glava"><div>🤖 AI Importer Portal</div><div>👤 <?=htmlspecialchars($uporabnik['ime'])?> <a href="?svet=ASTRA&pot=odjava" style="color:#f44336;margin-left:1rem">Odjava</a></div></div>
<div class="vsebina">
<h1>🤖 AI Importer</h1>
<p>Prilepite vsebino pogovora z AI-jem – sistem bo avtomatsko ustvaril vse datoteke.</p>
<?php if($sporocilo):?><div class="sporocilo"><?=htmlspecialchars($sporocilo)?></div><?php endif;?>
<form method="post">
<textarea name="vsebina" placeholder="Prilepite celoten pogovor z AI-jem ..."></textarea><br>
<button type="submit" class="gumb">🚀 Uvozi datoteke</button>
</form>
</div>
</body>
</html>
'''
    create_file("ASTRA/orodja/razvoj/importer.php", importer_php)
    
    # ASTRA/razvoj/kontrakti/ (prazna mapa – bomo dodali kasneje)
    create_folder("ASTRA/razvoj/kontrakti/")
    create_folder("ASTRA/razvoj/zabojnik/")
    create_folder("ASTRA/razvoj/zabojnik/pogovori/")
    
    # Ustvari tudi ostale mape
    create_folder("ASTRA/vmesnik/gradniki/")
    create_folder("ASTRA/vmesnik/slog/")
    create_folder("ASTRA/vmesnik/skripte/")
    create_folder("ASTRA/portali/")
    create_folder("ASTRA/orodja/upravljanje/")
    create_folder("ASTRA/orodja/diagnostika/")
    create_folder("ASTRA/dokumenti/pravila/")
    create_folder("ASTRA/dokumenti/navodila/")
    create_folder("ASTRA/dokumenti/gradivo/")
    create_folder("ASTRA/protokoli/")

# ============================================================================
# 3. ADAPTER/ (BOUNDARY LAYER)
# ============================================================================

def install_adapter():
    """Ustvari ADAPTER/"""
    log("\n" + "="*80, "INFO")
    log("🔵 3. USTVARJAM ADAPTER/ (BOUNDARY LAYER)", "INFO")
    log("="*80, "INFO")
    
    create_folder("ADAPTER/adapter_middleware/")
    create_folder("ADAPTER/vstop/")
    create_folder("ADAPTER/odzivi/")
    create_folder("ADAPTER/zahteve/")
    create_folder("ADAPTER/kanali/web/")
    create_folder("ADAPTER/kanali/api/")
    create_folder("ADAPTER/kanali/telegram/")
    create_folder("ADAPTER/kanali/facebook/")
    create_folder("ADAPTER/kanali/ai/")
    create_folder("ADAPTER/kanali/cli/")
    
    # adapter.php
    adapter_php = '''<?php
declare(strict_types=1);
function adapter_zagon(): void {
    $GLOBALS['ADAPTER_ZACETEK'] = microtime(true);
    $kanal = $GLOBALS['ADAPTER_FORCIRANI_KANAL'] ?? 'splet';
    $zahteva = ['kanal' => $kanal, 'pot' => $_GET['svet'] ?? 'GLOBALNO', 'metoda' => $_SERVER['REQUEST_METHOD'] ?? 'DOBI'];
    $odziv = ['status' => 'uspeh', 'status_koda' => 200, 'sporocilo' => '', 'vsebina' => []];
    if (function_exists('zagon_izvedi')) $odziv = zagon_izvedi($zahteva);
    header('Content-Type: application/json');
    echo json_encode($odziv);
}
'''
    create_file("ADAPTER/adapter.php", adapter_php)
    
    # Preprosti middleware-ji
    cors_php = '''<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(204); exit; }
'''
    create_file("ADAPTER/adapter_middleware/cors.php", cors_php)
    
    omejevalnik_php = '''<?php
$kljuc = md5($_SERVER['REMOTE_ADDR'] ?? '0.0.0.0');
$pot = sys_get_temp_dir() . '/rate_limit_' . $kljuc . '.json';
$omejitev = 100;
$casOkna = 60;
if (file_exists($pot)) {
    $podatki = json_decode(file_get_contents($pot), true);
    $podatki['zahteve'] = array_filter($podatki['zahteve'] ?? [], fn($t) => $t > time() - $casOkna);
    if (count($podatki['zahteve']) >= $omejitev) { http_response_code(429); die('Preveč zahtev.'); }
    $podatki['zahteve'][] = time();
} else { $podatki = ['zahteve' => [time()]]; }
file_put_contents($pot, json_encode($podatki));
'''
    create_file("ADAPTER/adapter_middleware/omejevalnik.php", omejevalnik_php)
    
    ip_blacklist_php = '''<?php
// Placeholder – IP blacklist implementacija
'''
    create_file("ADAPTER/adapter_middleware/ip_blacklist.php", ip_blacklist_php)
    
    dnevnik_php = '''<?php
$log = ['cas' => time(), 'ip' => $_SERVER['REMOTE_ADDR'] ?? '', 'pot' => $_SERVER['REQUEST_URI'] ?? ''];
$logPot = sys_get_temp_dir() . '/adapter.log';
file_put_contents($logPot, json_encode($log) . "\\n", FILE_APPEND);
'''
    create_file("ADAPTER/adapter_middleware/dnevnik.php", dnevnik_php)

# ============================================================================
# 4. SISTEM/ (OSTALI SLOJI)
# ============================================================================

def install_sistem():
    """Ustvari SISTEM/ in vse podmape"""
    log("\n" + "="*80, "INFO")
    log("🟢 4. USTVARJAM SISTEM/ (OSTALI SLOJI)", "INFO")
    log("="*80, "INFO")
    
    # Ustvari vse mape
    create_folder("SISTEM/kernel/jedro/")
    create_folder("SISTEM/kernel/varnost/")
    create_folder("SISTEM/kernel/middleware/")
    create_folder("SISTEM/kernel/registri/")
    create_folder("SISTEM/kernel/dogodki/")
    create_folder("SISTEM/kernel/kontrakti/")
    create_folder("SISTEM/kernel/vmesniki/")
    create_folder("SISTEM/kernel/poslusalci/")
    create_folder("SISTEM/kernel/knjiznice/")
    create_folder("SISTEM/kernel/baze/interface/")
    create_folder("SISTEM/kernel/izjeme/")
    create_folder("SISTEM/kernel/serializacija_podatkov/")
    
    create_folder("SISTEM/runtime/pipeline/")
    create_folder("SISTEM/runtime/vrsta/")
    create_folder("SISTEM/runtime/lifecycle/")
    create_folder("SISTEM/runtime/moduli/")
    create_folder("SISTEM/runtime/stanje/")
    create_folder("SISTEM/runtime/sled/")
    create_folder("SISTEM/runtime/kontekst/")
    create_folder("SISTEM/runtime/dogodki/")
    create_folder("SISTEM/runtime/izolacija/")
    create_folder("SISTEM/runtime/kanali/")
    create_folder("SISTEM/runtime/protokoli/")
    
    create_folder("SISTEM/storitve_svetov/uporabniki/")
    create_folder("SISTEM/storitve_svetov/moduli/")
    create_folder("SISTEM/storitve_svetov/globalno/")
    
    create_folder("SISTEM/administracija/avtomatika/")
    create_folder("SISTEM/administracija/diagnostika/")
    
    # zaganjalnik.php
    zaganjalnik_php = '''<?php
declare(strict_types=1);
class Zaganjalnik {
    private static ?Zaganjalnik $primerek = null;
    private array $faze = [
        '01_upravljalec_svetov', '02_napake', '03_varnost', '04_seja',
        '05_pravice', '06_cache', '07_dogodki', '08_kavlji', '09_ponudniki',
        '10_middleware', '11_usmerjevalnik', '12_validacija', '13_api',
        '14_zagon', '15_pogon', '16_upravljalec_runtime'
    ];
    public static function pridobiPrimerek(): Zaganjalnik {
        if (self::$primerek === null) self::$primerek = new Zaganjalnik();
        return self::$primerek;
    }
    public function zagon(): void {
        foreach ($this->faze as $faza) {
            $pot = POT_KERNEL_JEDRO . '/' . $faza . '.php';
            if (file_exists($pot)) require_once $pot;
        }
    }
}
function zagon_sistema(): void { Zaganjalnik::pridobiPrimerek()->zagon(); }
'''
    create_file("SISTEM/kernel/zaganjalnik.php", zaganjalnik_php)

# ============================================================================
# 5. GLOBALNO/ (FRONTEND)
# ============================================================================

def install_globalno():
    """Ustvari GLOBALNO/"""
    log("\n" + "="*80, "INFO")
    log("🔶 5. USTVARJAM GLOBALNO/ (FRONTEND)", "INFO")
    log("="*80, "INFO")
    
    create_folder("GLOBALNO/frontend/runtime/jedro/")
    create_folder("GLOBALNO/frontend/runtime/usmerjevalnik/")
    create_folder("GLOBALNO/frontend/runtime/nalagalnik/")
    create_folder("GLOBALNO/frontend/runtime/stanje/")
    create_folder("GLOBALNO/frontend/runtime/init/")
    create_folder("GLOBALNO/frontend/runtime/koordinacija/")
    create_folder("GLOBALNO/frontend/ui/navigacija/")
    create_folder("GLOBALNO/frontend/ui/obvestila/")
    create_folder("GLOBALNO/frontend/ui/mediji/")
    create_folder("GLOBALNO/frontend/ui/aktivacija/")
    create_folder("GLOBALNO/frontend/ui/interakcija/")
    create_folder("GLOBALNO/frontend/ui/obrazci/")
    create_folder("GLOBALNO/frontend/ui/vizualizacija/")
    create_folder("GLOBALNO/frontend/vendor/npm/")
    create_folder("GLOBALNO/frontend/vendor/lokalno/")
    create_folder("GLOBALNO/frontend/vendor/razsirjeno/")
    
    create_folder("GLOBALNO/render/strani/javno/")
    create_folder("GLOBALNO/render/strani/uporabnik/")
    create_folder("GLOBALNO/render/strani/admin/")
    create_folder("GLOBALNO/render/strani/napake/")
    create_folder("GLOBALNO/render/strani/sistem/")
    create_folder("GLOBALNO/render/strani/pravno/")
    create_folder("GLOBALNO/render/elementi/")
    create_folder("GLOBALNO/render/postavitev/")
    create_folder("GLOBALNO/render/osnova/")
    
    create_folder("GLOBALNO/vmesnik/pisave/klasicne/")
    create_folder("GLOBALNO/vmesnik/pisave/misticne/")
    create_folder("GLOBALNO/vmesnik/pisave/web/")
    create_folder("GLOBALNO/vmesnik/teme/standard/")
    create_folder("GLOBALNO/vmesnik/teme/minimal/")
    create_folder("GLOBALNO/vmesnik/teme/mystic/")
    create_folder("GLOBALNO/vmesnik/teme/astra/")
    create_folder("GLOBALNO/vmesnik/css/jedro/")
    create_folder("GLOBALNO/vmesnik/css/gradniki/")
    create_folder("GLOBALNO/vmesnik/css/postavitev/")
    create_folder("GLOBALNO/vmesnik/css/animacije/")
    create_folder("GLOBALNO/vmesnik/css/pomocniki/")
    
    create_folder("GLOBALNO/predloge/email/")
    create_folder("GLOBALNO/predloge/pdf/")
    create_folder("GLOBALNO/predloge/moduli/")
    create_folder("GLOBALNO/slike/logo/")
    create_folder("GLOBALNO/slike/ozadja/")
    create_folder("GLOBALNO/slike/teksture/")
    create_folder("GLOBALNO/slike/social/")
    create_folder("GLOBALNO/zvoki/obvestila/")
    create_folder("GLOBALNO/zvoki/ambient/")
    create_folder("GLOBALNO/zvoki/interakcije/")
    
    # Osnovni sistem.js
    sistem_js = '''const Sistem = (function() {
    let config = { debug: false, apiUrl: 'api.php', token: null };
    async function posljiAPI(endpoint, data = {}) {
        const options = { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) };
        const response = await fetch(config.apiUrl + '?akcija=' + endpoint, options);
        return await response.json();
    }
    function init(options = {}) { config = { ...config, ...options }; console.log('Sistem inicializiran'); }
    return { init, posljiAPI };
})();
document.addEventListener('DOMContentLoaded', () => Sistem.init());
'''
    create_file("GLOBALNO/frontend/runtime/jedro/sistem.js", sistem_js)
    
    # Osnovna domov.php
    domov_php = '''<?php
$uporabnik = $vsebina['uporabnik'] ?? null;
?>
<div class="domov">
<h1>Dobrodošli v <?= IME_APLIKACIJE ?></h1>
<?php if($uporabnik): ?>
<p>Pozdravljen/a, <?= htmlspecialchars($uporabnik['ime'] ?? 'Uporabnik') ?>!</p>
<?php else: ?>
<a href="?svet=UPORABNIKI&pot=prijava" class="gumb">Prijava</a>
<a href="?svet=UPORABNIKI&pot=registracija" class="gumb">Registracija</a>
<?php endif; ?>
</div>
'''
    create_file("GLOBALNO/render/strani/javno/domov.php", domov_php)
    
    # Osnovni CSS
    osnova_css = '''*{margin:0;padding:0;box-sizing:border-box}
body{font-family:system-ui;background:#0a0a1a;color:#d4c5a9;line-height:1.6}
.glavna{max-width:1200px;margin:0 auto;padding:2rem}
.gumb{display:inline-block;padding:0.5rem 1rem;background:rgba(232,200,74,0.1);border:1px solid #e8c84a;border-radius:25px;color:#e8c84a;text-decoration:none}
.gumb:hover{background:#e8c84a;color:#0a0a1a}
'''
    create_file("GLOBALNO/vmesnik/css/jedro/osnova.css", osnova_css)

# ============================================================================
# 6. UPORABNIKI/, MODULI/, PODATKI/, VSEBINA/
# ============================================================================

def install_ostalo():
    """Ustvari preostale mape"""
    log("\n" + "="*80, "INFO")
    log("📦 6. USTVARJAM PREOSTALE MAPE", "INFO")
    log("="*80, "INFO")
    
    # UPORABNIKI/
    create_folder("UPORABNIKI/prikaz/uporabnik/")
    create_folder("UPORABNIKI/prikaz/skrbnik/")
    create_folder("UPORABNIKI/podatki/")
    
    # MODULI/
    create_folder("MODULI/Modul_Bridge/jedro/")
    create_folder("MODULI/Modul_Bridge/embed/")
    create_folder("MODULI/Modul_Bridge/generator/")
    create_folder("MODULI/Modul_Bridge/demo/")
    create_folder("MODULI/Modul_Bridge/stebelne/")
    create_folder("MODULI/NEBO/Stelaris/")
    create_folder("MODULI/NEBO/Lunaris/")
    create_folder("MODULI/NEBO/Jyotir/")
    create_folder("MODULI/ZEMLJA/Pranaymica/")
    create_folder("MODULI/ZEMLJA/QiVitalis/")
    create_folder("MODULI/ZEMLJA/Energetica/")
    create_folder("MODULI/VODA/")
    create_folder("MODULI/OGENJ/")
    create_folder("MODULI/ETER/")
    create_folder("MODULI/ORAKLEUM/OrakleumTarot/")
    create_folder("MODULI/VIP/Synera/")
    
    # Modul_Bridge/index.php
    bridge_index = '''<?php
require_once __DIR__ . '/jedro/sistem_preveri.php';
if (SISTEM_OBSTAJA) {
    require_once __DIR__ . '/jedro/sistemske_funkcije.php';
} else {
    require_once __DIR__ . '/embed/mini_sistem.php';
}
echo "<h1>Modul Bridge</h1><p>Sistem " . (SISTEM_OBSTAJA ? "obstaja" : "ne obstaja (demo način)") . "</p>";
'''
    create_file("MODULI/Modul_Bridge/index.php", bridge_index)
    
    # sistem_preveri.php
    sistem_preveri = '''<?php
$SISTEM_OBSTAJA = false;
$poti = [__DIR__ . '/../../../../pot.php', __DIR__ . '/../../../../../pot.php'];
foreach ($poti as $pot) { if (file_exists($pot)) { require_once $pot; $SISTEM_OBSTAJA = true; break; } }
define('SISTEM_OBSTAJA', $SISTEM_OBSTAJA);
'''
    create_file("MODULI/Modul_Bridge/jedro/sistem_preveri.php", sistem_preveri)
    
    # PODATKI/
    create_folder("PODATKI/sef/")
    create_folder("PODATKI/globalno/")
    create_folder("PODATKI/sistem/dnevnik/")
    create_folder("PODATKI/sistem/cache/")
    create_folder("PODATKI/sistem/vrste/")
    create_folder("PODATKI/sistem/registri/")
    create_folder("PODATKI/sistem/zaklepi/")
    create_folder("PODATKI/sistem/dovoljenja/")
    create_folder("PODATKI/sistem/analitika/")
    create_folder("PODATKI/sistem/idempotenca/")
    create_folder("PODATKI/sistem/omejevalnik/")
    create_folder("PODATKI/moduli/")
    create_folder("PODATKI/uporabniki/")
    create_folder("PODATKI/baze/json/")
    create_folder("PODATKI/baze/sqlite/")
    create_folder("PODATKI/baze/mysql/")
    create_folder("PODATKI/skladisce/izvozi/")
    create_folder("PODATKI/skladisce/varnostne_kopije/")
    create_folder("PODATKI/skladisce/arhiv/")
    create_folder("PODATKI/skladisce/podatkovne_zbirke/")
    create_folder("PODATKI/tmp/")
    
    # VSEBINA/
    create_folder("VSEBINA/dokumentacija/")
    create_folder("VSEBINA/faq/")
    create_folder("VSEBINA/gradivo/")
    create_folder("VSEBINA/predloge/")
    create_folder("VSEBINA/temeljna/zakoni/")
    create_folder("VSEBINA/temeljna/prerokbe/")
    create_folder("VSEBINA/temeljna/verzi/")
    create_folder("VSEBINA/temeljna/manifesti/")
    create_folder("VSEBINA/ustvarjeno/")
    
    # .env primer
    env_primer = '''# ASTRAMENTALICA .env primer
APP_ENV=development
DEBUG=true
ASTRA_ADMIN_UPORABNISKO_IME=admin
ASTRA_ADMIN_GESLO=admin2024
'''
    create_file("PODATKI/sef/.env.primer", env_primer)

# ============================================================================
# MAIN
# ============================================================================

def main():
    """Glavna funkcija"""
    print(f"{CYAN}")
    print("="*80)
    print(" ASTRAMENTALICA v111.0 – INSTALACIJSKI SKRIPT")
    print("="*80)
    print(f"{RESET}")
    
    log(f"Začenjam namestitev v mapo: {ROOT}", "INFO")
    log(f"Log datoteka: {LOG_FILE}", "INFO")
    
    # Preveri PHP
    check_php()
    
    # Ustvari vse
    install_root()
    install_astra()
    install_adapter()
    install_sistem()
    install_globalno()
    install_ostalo()
    
    # Končno sporočilo
    log("\n" + "="*80, "SUCCESS")
    log("🎉 ASTRAMENTALICA v111.0 – NAMESTITEV KONČANA!", "SUCCESS")
    log("="*80, "SUCCESS")
    log("", "INFO")
    log("📋 NASLEDNJI KORAKI:", "INFO")
    log("1. Zaženite: php -S localhost:8000", "INFO")
    log("2. Odprite: http://localhost:8000", "INFO")
    log("3. ASTRA admin: http://localhost:8000/?svet=ASTRA&pot=prijava", "INFO")
    log("4. Uporabniško ime: admin, Geslo: admin2024", "INFO")
    log("", "INFO")
    log("📁 Struktura je ustvarjena. Sedaj lahko uporabite AI Importer:", "INFO")
    log("   http://localhost:8000/?svet=ASTRA&pot=importer", "INFO")
    log("", "INFO")

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        log("\nNamestitev prekinjena s strani uporabnika.", "WARNING")
        sys.exit(1)
    except Exception as e:
        log(f"Nepričakovana napaka: {e}", "ERROR")
        sys.exit(1)