package layout

import (
    "fmt"
    "strings"
    "time"
    "github.com/seaweedfs/seaweedfs/weed/admin/dash"
    "github.com/seaweedfs/seaweedfs/weed/util/version"
)

script setBasePath(prefix string) {
    window.__BASE_PATH__ = prefix;
}

templ Layout(view ViewContext, content templ.Component) {
{{
  username := view.Username
  if username == "" {
    username = "unknown"
  }
  csrfToken := view.CSRFToken

  currentPath := ""
  if view.Request != nil {
    currentPath = view.Request.URL.Path
  }

  // Detect if we're on a message queue page to keep submenu expanded
  isMQPage := strings.HasPrefix(currentPath, "/mq/")

  // Detect if we're on a storage page to keep submenu expanded
  isStoragePage := strings.HasPrefix(currentPath, "/storage/volumes") || strings.HasPrefix(currentPath, "/storage/ec-shards") || strings.HasPrefix(currentPath, "/storage/collections")

  // Detect if we're on a cluster page (but not storage page) to keep submenu expanded
  isClusterPage := (strings.HasPrefix(currentPath, "/cluster/masters") || strings.HasPrefix(currentPath, "/cluster/volume-servers") || strings.HasPrefix(currentPath, "/cluster/filers") || strings.HasPrefix(currentPath, "/cluster/s3"))

  isDefaultWorkerPage := currentPath == "/plugin" ||
    strings.HasPrefix(currentPath, "/plugin/configuration") ||
    strings.HasPrefix(currentPath, "/plugin/detection") ||
    strings.HasPrefix(currentPath, "/plugin/queue") ||
    strings.HasPrefix(currentPath, "/plugin/execution") ||
    strings.HasPrefix(currentPath, "/plugin/monitoring") ||
    currentPath == "/plugin/lanes/default" ||
    strings.HasPrefix(currentPath, "/plugin/lanes/default/")
  isIcebergWorkerPage := currentPath == "/plugin/lanes/iceberg" || strings.HasPrefix(currentPath, "/plugin/lanes/iceberg/")
  isLifecycleWorkerPage := currentPath == "/plugin/lanes/lifecycle" || strings.HasPrefix(currentPath, "/plugin/lanes/lifecycle/")
}}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>SeaweedFS Admin</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="csrf-token" content={ csrfToken }>
    <link rel="icon" href={ string(view.P("/static/favicon.ico")) } type="image/x-icon">

    <!-- Bootstrap CSS -->
    <link href={ string(view.P("/static/css/bootstrap.min.css")) } rel="stylesheet">
    <!-- Font Awesome CSS -->
    <link href={ string(view.P("/static/css/fontawesome.min.css")) } rel="stylesheet">
    <!-- HTMX -->
    <script src={ string(view.P("/static/js/htmx.min.js")) }></script>
    <!-- Custom CSS -->
    <link rel="stylesheet" href={ string(view.P("/static/css/admin.css")) }>
    <!-- Set base path for JavaScript -->
    @setBasePath(view.URLPrefix)
</head>
<body>
    <div class="container-fluid p-0">
        <!-- Header -->
        <header class="navbar navbar-expand-lg navbar-dark bg-primary sticky-top">
            <div class="container-fluid">
                <a class="navbar-brand fw-bold" href={ view.P("/admin") }>
                    <i class="fas fa-server me-2"></i>
                    SeaweedFS Admin
                </a>

                <button class="navbar-toggler d-md-none me-2" type="button" data-bs-toggle="collapse" data-bs-target="#sidebarMenu" aria-controls="sidebarMenu" aria-expanded="false" aria-label="Toggle navigation menu">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="User menu">
                    <i class="fas fa-user"></i>
                </button>

                <div class="collapse navbar-collapse" id="navbarNav">
                    <ul class="navbar-nav ms-auto">
                        <li class="nav-item dropdown">
                            <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown">
                                <i class="fas fa-user me-1"></i>{username}
                            </a>
                            <ul class="dropdown-menu">
                                <li><a class="dropdown-item" href={ view.P("/logout") }>
                                    <i class="fas fa-sign-out-alt me-2"></i>Logout
                                </a></li>
                            </ul>
                        </li>
                    </ul>
                </div>
            </div>
        </header>

        <div class="row g-0">
            <!-- Sidebar -->
            <div class="col-md-3 col-lg-2 d-md-block bg-light sidebar collapse" id="sidebarMenu">
                <div class="position-sticky pt-3">
                    <h6 class="sidebar-heading px-3 mt-4 mb-1 text-muted">
                        <span>MAIN</span>
                    </h6>
                    <ul class="nav flex-column">
                        <li class="nav-item">
                            <a class="nav-link" href={ view.P("/admin") }>
                                <i class="fas fa-tachometer-alt me-2"></i>Dashboard
                            </a>
                        </li>
                        <li class="nav-item">
                            <a class={ "nav-link", templ.KV("collapsed", !isClusterPage) } href="#" data-bs-toggle="collapse" data-bs-target="#clusterSubmenu" aria-expanded={ fmt.Sprintf("%t", isClusterPage) } aria-controls="clusterSubmenu">
                                <i class="fas fa-sitemap me-2"></i>Cluster
                                <i class="fas fa-chevron-down ms-auto"></i>
                            </a>
                            <div class={ "collapse", templ.KV("show", isClusterPage) } id="clusterSubmenu">
                                <ul class="nav flex-column ms-3">
                                    <li class="nav-item">
                                        <a class="nav-link py-2" href={ view.P("/cluster/masters") }>
                                            <i class="fas fa-crown me-2"></i>Masters
                                        </a>
                                    </li>
                                    <li class="nav-item">
                                        <a class="nav-link py-2" href={ view.P("/cluster/volume-servers") }>
                                            <i class="fas fa-server me-2"></i>Volume Servers
                                        </a>
                                    </li>
                                    <li class="nav-item">
                                        <a class="nav-link py-2" href={ view.P("/cluster/filers") }>
                                            <i class="fas fa-folder-open me-2"></i>Filers
                                        </a>
                                    </li>
                                    <li class="nav-item">
                                        <a class="nav-link py-2" href={ view.P("/cluster/s3") }>
                                            <i class="fas fa-cloud me-2"></i>S3 Servers
                                        </a>
                                    </li>
                                </ul>
                            </div>
                        </li>
                        <li class="nav-item">
                            <a class={ "nav-link", templ.KV("collapsed", !isStoragePage) } href="#" data-bs-toggle="collapse" data-bs-target="#storageSubmenu" aria-expanded={ fmt.Sprintf("%t", isStoragePage) } aria-controls="storageSubmenu">
                                <i class="fas fa-hdd me-2"></i>Storage
                                <i class="fas fa-chevron-down ms-auto"></i>
                            </a>
                            <div class={ "collapse", templ.KV("show", isStoragePage) } id="storageSubmenu">
                                <ul class="nav flex-column ms-3">
                                    <li class="nav-item">
                                        <a class="nav-link py-2" href={ view.P("/storage/volumes") }>
                                            <i class="fas fa-database me-2"></i>Volumes
                                        </a>
                                    </li>
                                    <li class="nav-item">
                                        <a class="nav-link py-2" href={ view.P("/storage/ec-shards") }>
                                            <i class="fas fa-th-large me-2"></i>EC Volumes
                                        </a>
                                    </li>
                                    <li class="nav-item">
                                        <a class="nav-link py-2" href={ view.P("/storage/collections") }>
                                            <i class="fas fa-layer-group me-2"></i>Collections
                                        </a>
                                    </li>
                                </ul>
                            </div>
                        </li>
                    </ul>

                    <h6 class="sidebar-heading px-3 mt-4 mb-1 text-muted">
                        <span>OBJECT STORE</span>
                    </h6>
                    <ul class="nav flex-column">
                        <li class="nav-item">
                            <a class="nav-link" href={ view.P("/object-store/buckets") }>
                                <i class="fas fa-cube me-2"></i>Buckets
                            </a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href={ view.P("/object-store/s3tables/buckets") }>
                                <i class="fas fa-table me-2"></i>Table Buckets
                            </a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href={ view.P("/object-store/users") }>
                                <i class="fas fa-users me-2"></i>Users
                            </a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href={ view.P("/object-store/groups") }>
                                <i class="fas fa-users-cog me-2"></i>Groups
                            </a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href={ view.P("/object-store/service-accounts") }>
                                <i class="fas fa-robot me-2"></i>Service Accounts
                            </a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href={ view.P("/object-store/policies") }>
                                <i class="fas fa-shield-alt me-2"></i>Policies
                            </a>
                        </li>
                    </ul>

                    <h6 class="sidebar-heading px-3 mt-4 mb-1 text-muted">
                        <span>MANAGEMENT</span>
                    </h6>
                    <ul class="nav flex-column">
                        <li class="nav-item">
                            <a class="nav-link" href={ view.P("/files") }>
                                <i class="fas fa-folder me-2"></i>File Browser
                            </a>
                        </li>
                        <li class="nav-item">
                            if isMQPage {
                                <a class="nav-link" href="#" data-bs-toggle="collapse" data-bs-target="#messageQueueSubmenu" aria-expanded="true" aria-controls="messageQueueSubmenu">
                                    <i class="fas fa-comments me-2"></i>Message Queue
                                    <i class="fas fa-chevron-down ms-auto"></i>
                                </a>
                            } else {
                                <a class="nav-link collapsed" href="#" data-bs-toggle="collapse" data-bs-target="#messageQueueSubmenu" aria-expanded="false" aria-controls="messageQueueSubmenu">
                                    <i class="fas fa-comments me-2"></i>Message Queue
                                    <i class="fas fa-chevron-down ms-auto"></i>
                                </a>
                            }
                            if isMQPage {
                                <div class="collapse show" id="messageQueueSubmenu">
                                    <ul class="nav flex-column ms-3">
                                        <li class="nav-item">
                                            if currentPath == "/mq/brokers" {
                                                <a class="nav-link py-2 active" href={ view.P("/mq/brokers") }>
                                                    <i class="fas fa-server me-2"></i>Brokers
                                                </a>
                                            } else {
                                                <a class="nav-link py-2" href={ view.P("/mq/brokers") }>
                                                    <i class="fas fa-server me-2"></i>Brokers
                                                </a>
                                            }
                                        </li>
                                        <li class="nav-item">
                                            if currentPath == "/mq/topics" {
                                                <a class="nav-link py-2 active" href={ view.P("/mq/topics") }>
                                                    <i class="fas fa-list-alt me-2"></i>Topics
                                                </a>
                                            } else {
                                                <a class="nav-link py-2" href={ view.P("/mq/topics") }>
                                                    <i class="fas fa-list-alt me-2"></i>Topics
                                                </a>
                                            }
                                        </li>

                                    </ul>
                                </div>
                            } else {
                                <div class="collapse" id="messageQueueSubmenu">
                                    <ul class="nav flex-column ms-3">
                                        <li class="nav-item">
                                            <a class="nav-link py-2" href={ view.P("/mq/brokers") }>
                                                <i class="fas fa-server me-2"></i>Brokers
                                            </a>
                                        </li>
                                        <li class="nav-item">
                                            <a class="nav-link py-2" href={ view.P("/mq/topics") }>
                                                <i class="fas fa-list-alt me-2"></i>Topics
                                            </a>
                                        </li>

                                    </ul>
                                </div>
                            }
                        </li>
                    </ul>

                    <h6 class="sidebar-heading px-3 mt-4 mb-1 text-muted">
                        <span>WORKERS</span>
                    </h6>
                    <ul class="nav flex-column">
                        <li class="nav-item">
                            if isDefaultWorkerPage {
                                <a class="nav-link active" href={ view.P("/plugin/lanes/default") }>
                                    <i class="fas fa-server me-2"></i>Default
                                </a>
                            } else {
                                <a class="nav-link" href={ view.P("/plugin/lanes/default") }>
                                    <i class="fas fa-server me-2"></i>Default
                                </a>
                            }
                        </li>
                        <li class="nav-item">
                            if isIcebergWorkerPage {
                                <a class="nav-link active" href={ view.P("/plugin/lanes/iceberg") }>
                                    <i class="fas fa-snowflake me-2"></i>Iceberg
                                </a>
                            } else {
                                <a class="nav-link" href={ view.P("/plugin/lanes/iceberg") }>
                                    <i class="fas fa-snowflake me-2"></i>Iceberg
                                </a>
                            }
                        </li>
                        <li class="nav-item">
                            if isLifecycleWorkerPage {
                                <a class="nav-link active" href={ view.P("/plugin/lanes/lifecycle") }>
                                    <i class="fas fa-hourglass-half me-2"></i>Lifecycle
                                </a>
                            } else {
                                <a class="nav-link" href={ view.P("/plugin/lanes/lifecycle") }>
                                    <i class="fas fa-hourglass-half me-2"></i>Lifecycle
                                </a>
                            }
                        </li>
                    </ul>
                </div>
            </div>

            <!-- Sidebar backdrop for mobile -->
            <div class="sidebar-backdrop" id="sidebarBackdrop"></div>

            <!-- Main content -->
            <main class="col-md-9 ms-sm-auto col-lg-10 px-3 px-md-4">
                <div class="pt-3">
                    @content
                </div>
            </main>
        </div>
    </div>

    <!-- Footer -->
    <footer class="footer mt-auto py-3 bg-light">
        <div class="container-fluid text-center">
            <small class="text-muted">
                &copy; {fmt.Sprintf("%d", time.Now().Year())} SeaweedFS Admin v{version.VERSION_NUMBER}
                if version.COMMIT != "" {
                    <span class="mx-1">({version.COMMIT})</span>
                }
                if !strings.Contains(version.VERSION, "enterprise") {
                    <span class="mx-2">•</span>
                    <a href="https://seaweedfs.com" target="_blank" class="text-decoration-none">
                        <i class="fas fa-star me-1"></i>Enterprise Version Available
                    </a>
                }
            </small>
        </div>
    </footer>

    <!-- Bootstrap JS -->
    <script src={ string(view.P("/static/js/bootstrap.bundle.min.js")) }></script>
    <!-- Modal Alerts JS (replaces native alert/confirm) -->
    <script src={ string(view.P("/static/js/modal-alerts.js")) }></script>
    <!-- Custom JS -->
    <script src={ string(view.P("/static/js/admin.js")) }></script>
    <script src={ string(view.P("/static/js/iam-utils.js")) }></script>
    <script src={ string(view.P("/static/js/s3tables.js")) }></script>
</body>
</html>
}

templ LoginForm(title string, errorMessage string, csrfToken string) {
{{
  prefix := dash.URLPrefixFromContext(ctx)
}}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{title} - Login</title>
    <link rel="icon" href={ prefix + "/static/favicon.ico" } type="image/x-icon">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href={ prefix + "/static/css/bootstrap.min.css" } rel="stylesheet">
    <link href={ prefix + "/static/css/fontawesome.min.css" } rel="stylesheet">
</head>
<body class="bg-light">
    <div class="container">
        <div class="row justify-content-center min-vh-100 align-items-center">
            <div class="col-md-6 col-lg-4">
                <div class="card shadow">
                    <div class="card-body p-5">
                        <div class="text-center mb-4">
                            <i class="fas fa-server fa-3x text-primary mb-3"></i>
                            <h4 class="card-title">{title}</h4>
                            <p class="text-muted">Please sign in to continue</p>
                        </div>

                        if errorMessage != "" {
                            <div class="alert alert-danger" role="alert">
                                <i class="fas fa-exclamation-triangle me-2"></i>
                                {errorMessage}
                            </div>
                        }

                        <form method="POST" action={ templ.SafeURL(prefix + "/login") }>
                            <input type="hidden" name="csrf_token" value={ csrfToken }>
                            <div class="mb-3">
                                <label for="username" class="form-label">Username</label>
                                <div class="input-group">
                                    <span class="input-group-text">
                                        <i class="fas fa-user"></i>
                                    </span>
                                    <input type="text" class="form-control" id="username" name="username" required>
                                </div>
                            </div>

                            <div class="mb-4">
                                <label for="password" class="form-label">Password</label>
                                <div class="input-group">
                                    <span class="input-group-text">
                                        <i class="fas fa-lock"></i>
                                    </span>
                                    <input type="password" class="form-control" id="password" name="password" required>
                                </div>
                            </div>

                            <button type="submit" class="btn btn-primary w-100">
                                <i class="fas fa-sign-in-alt me-2"></i>Sign In
                            </button>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <script src={ prefix + "/static/js/bootstrap.bundle.min.js" }></script>
</body>
</html>
}
