{% extends "admin_base.html" %}
{% block extra_head %}
{{ super() }}
<link rel="stylesheet" href="/static/css/services.css">
{% endblock %}
{% block admin_content %}
{% set svc = service %}
<div class="service-detail" data-service-detail data-service="{{ svc.name }}">
<a class="service-back" href="/admin/services">&larr; All services</a>
<div class="service-detail-head">
<div class="service-detail-title">
<h2>{{ svc.title }}</h2>
<span class="service-status {{ svc.status }}">{{ svc.status }}</span>
</div>
{% if svc.description %}<p class="service-detail-desc">{{ svc.description }}</p>{% endif %}
<div class="service-controls">
<button type="button" class="service-btn" data-action="start" data-service="{{ svc.name }}" {% if svc.enabled %}disabled{% endif %}>Start</button>
<button type="button" class="service-btn" data-action="stop" data-service="{{ svc.name }}" data-confirm="Stop the {{ svc.title }} service?" {% if not svc.enabled %}disabled{% endif %}>Stop</button>
<button type="button" class="service-btn" data-action="run" data-service="{{ svc.name }}">Run now</button>
<button type="button" class="service-btn" data-action="clear-logs" data-service="{{ svc.name }}" data-confirm="Clear the log buffer for {{ svc.title }}?">Clear logs</button>
</div>
</div>
<div class="svc-tabs" data-tabs>
<div class="svc-tabbar" role="tablist">
<button type="button" class="svc-tab" data-tab="overview">Overview</button>
<button type="button" class="svc-tab" data-tab="config">Configuration</button>
<button type="button" class="svc-tab" data-tab="logs">Logs</button>
</div>
<section class="svc-tabpane" data-tab-pane="overview">
<div class="svc-meta-grid">
<div class="svc-meta-item"><span class="svc-meta-label">Uptime</span><span class="svc-meta-value" data-meta="uptime">{{ svc.uptime or "-" }}</span></div>
<div class="svc-meta-item"><span class="svc-meta-label">Last run</span><span class="svc-meta-value" data-meta="last_run">{% if svc.last_run %}{{ format_date(svc.last_run, include_time=True) }}{% else %}-{% endif %}</span></div>
<div class="svc-meta-item"><span class="svc-meta-label">Next run</span><span class="svc-meta-value" data-meta="next_run">{% if svc.next_run %}{{ format_date(svc.next_run, include_time=True) }}{% else %}-{% endif %}</span></div>
<div class="svc-meta-item"><span class="svc-meta-label">Heartbeat</span><span class="svc-meta-value" data-meta="heartbeat">{% if svc.heartbeat %}{{ format_date(svc.heartbeat, include_time=True) }}{% else %}-{% endif %}</span></div>
<div class="svc-meta-item"><span class="svc-meta-label">Interval</span><span class="svc-meta-value" data-meta="interval">every {{ svc.interval_seconds }}s</span></div>
</div>
<div class="service-metrics" data-metrics></div>
</section>
<section class="svc-tabpane" data-tab-pane="config">
<form class="service-config" data-config-form data-service="{{ svc.name }}">
{% for group in svc.field_groups %}
<fieldset class="config-section">
<legend>{{ group.name }}</legend>
{% for field in group.fields %}
<div class="admin-field">
<label for="{{ svc.name }}_{{ field.key }}">{{ field.label }}</label>
{% if field.type == "bool" %}
<select id="{{ svc.name }}_{{ field.key }}" name="{{ field.key }}" class="admin-select" style="max-width: 160px;">
<option value="1" {% if field.value == "1" %}selected{% endif %}>Enabled</option>
<option value="0" {% if field.value != "1" %}selected{% endif %}>Disabled</option>
</select>
{% elif field.type == "select" %}
<select id="{{ svc.name }}_{{ field.key }}" name="{{ field.key }}" class="admin-select">
{% for opt in field.options %}
<option value="{{ opt.value }}" {% if field.value == opt.value %}selected{% endif %}>{{ opt.label }}</option>
{% endfor %}
</select>
{% elif field.type == "text" %}
<textarea id="{{ svc.name }}_{{ field.key }}" name="{{ field.key }}" rows="3">{{ field.value }}</textarea>
{% elif field.type == "password" %}
<input type="password" id="{{ svc.name }}_{{ field.key }}" name="{{ field.key }}" value="" placeholder="{% if field.is_set %}Set - leave blank to keep current{% else %}Not set{% endif %}">
{% elif field.type == "int" %}
<input type="number" id="{{ svc.name }}_{{ field.key }}" name="{{ field.key }}" value="{{ field.value }}"{% if field.minimum is not none %} min="{{ field.minimum }}"{% endif %}{% if field.maximum is not none %} max="{{ field.maximum }}"{% endif %} style="max-width: 160px;">
{% elif field.type == "float" %}
<input type="number" step="any" id="{{ svc.name }}_{{ field.key }}" name="{{ field.key }}" value="{{ field.value }}"{% if field.minimum is not none %} min="{{ field.minimum }}"{% endif %}{% if field.maximum is not none %} max="{{ field.maximum }}"{% endif %} style="max-width: 160px;">
{% elif field.type == "url" %}
<input type="url" id="{{ svc.name }}_{{ field.key }}" name="{{ field.key }}" value="{{ field.value }}">
{% else %}
<input type="text" id="{{ svc.name }}_{{ field.key }}" name="{{ field.key }}" value="{{ field.value }}">
{% endif %}
{% if field.help %}<small class="hint-text">{{ field.help }}</small>{% endif %}
<small class="field-error" data-error="{{ field.key }}"></small>
</div>
{% endfor %}
</fieldset>
{% endfor %}
<div class="config-actions">
<button type="submit" class="btn btn-primary">Save configuration</button>
<span class="config-status" data-config-status></span>
</div>
</form>
</section>
<section class="svc-tabpane" data-tab-pane="logs">
<div class="service-log">
<div class="log-header">Log</div>
<pre class="log-output">{% for line in svc.log_buffer %}{{ line }}
{% else %}No log entries yet.
{% endfor %}</pre>
</div>
</section>
</div>
</div>
{% endblock %}
{% block extra_js %}
<script type="module" src="/static/js/ServiceMonitor.js"></script>
<script type="module">
new window.ServiceMonitor().start();
</script>
{% endblock %}