{# app/templates/admin/code-quality-dashboard.html #}
{% extends "admin/base.html" %}
{% from 'shared/macros/alerts.html' import loading_state, error_state, alert_dynamic %}
{% from 'shared/macros/headers.html' import page_header_flex, refresh_button, action_button %}

{% block title %}Code Quality Dashboard{% endblock %}

{% block alpine_data %}codeQualityDashboard(){% endblock %}

{% block extra_scripts %}
<script src="/static/admin/js/code-quality-dashboard.js"></script>
{% endblock %}

{% block content %}
{% call page_header_flex(title='Code Quality Dashboard', subtitle='Architecture validation and technical debt tracking') %}
    {{ refresh_button(variant='secondary') }}
    {{ action_button('Run Scan', 'Scanning...', 'scanning', 'runScan()', icon='search') }}
{% endcall %}

{{ loading_state('Loading dashboard...') }}

{{ error_state('Error loading dashboard') }}

{{ alert_dynamic(type='success', message_var='successMessage', show_condition='successMessage') }}

<!-- Dashboard Content -->
<div x-show="!loading && !error">
    <!-- Stats Cards -->
    <div class="grid gap-6 mb-8 md:grid-cols-2 xl:grid-cols-4">
        <!-- Card: Total Violations -->
        <div class="flex items-center p-4 bg-white rounded-lg shadow-xs dark:bg-gray-800">
            <div class="p-3 mr-4 text-red-500 bg-red-100 rounded-full dark:text-white dark:bg-red-600">
                <span x-html="$icon('exclamation', 'w-5 h-5')"></span>
            </div>
            <div>
                <p class="mb-2 text-sm font-medium text-gray-600 dark:text-gray-400">
                    Total Violations
                </p>
                <p class="text-lg font-semibold text-gray-700 dark:text-gray-200" x-text="stats.total_violations">
                    0
                </p>
            </div>
        </div>

        <!-- Card: Errors -->
        <div class="flex items-center p-4 bg-white rounded-lg shadow-xs dark:bg-gray-800">
            <div class="p-3 mr-4 text-orange-500 bg-orange-100 rounded-full dark:text-orange-100 dark:bg-orange-500">
                <span x-html="$icon('x-circle', 'w-5 h-5')"></span>
            </div>
            <div>
                <p class="mb-2 text-sm font-medium text-gray-600 dark:text-gray-400">
                    Errors
                </p>
                <p class="text-lg font-semibold text-gray-700 dark:text-gray-200" x-text="stats.errors">
                    0
                </p>
            </div>
        </div>

        <!-- Card: Warnings -->
        <div class="flex items-center p-4 bg-white rounded-lg shadow-xs dark:bg-gray-800">
            <div class="p-3 mr-4 text-yellow-500 bg-yellow-100 rounded-full dark:text-yellow-100 dark:bg-yellow-500">
                <span x-html="$icon('information-circle', 'w-5 h-5')"></span>
            </div>
            <div>
                <p class="mb-2 text-sm font-medium text-gray-600 dark:text-gray-400">
                    Warnings
                </p>
                <p class="text-lg font-semibold text-gray-700 dark:text-gray-200" x-text="stats.warnings">
                    0
                </p>
            </div>
        </div>

        <!-- Card: Technical Debt Score -->
        <div class="flex items-center p-4 bg-white rounded-lg shadow-xs dark:bg-gray-800">
            <div class="p-3 mr-4 rounded-full"
                 :class="{
                     'text-green-500 bg-green-100 dark:text-green-100 dark:bg-green-500': stats.technical_debt_score >= 80,
                     'text-yellow-500 bg-yellow-100 dark:text-yellow-100 dark:bg-yellow-500': stats.technical_debt_score >= 50 && stats.technical_debt_score < 80,
                     'text-red-500 bg-red-100 dark:text-red-100 dark:bg-red-500': stats.technical_debt_score < 50
                 }">
                <span x-html="$icon('chart-bar', 'w-5 h-5')"></span>
            </div>
            <div>
                <p class="mb-2 text-sm font-medium text-gray-600 dark:text-gray-400">
                    Health Score
                </p>
                <p class="text-lg font-semibold text-gray-700 dark:text-gray-200" x-text="stats.technical_debt_score + '/100'">
                    0/100
                </p>
            </div>
        </div>
    </div>

    <!-- Status Cards -->
    <div class="grid gap-6 mb-8 md:grid-cols-2 xl:grid-cols-4">
        <!-- Open -->
        <div class="p-4 bg-white rounded-lg shadow-xs dark:bg-gray-800">
            <p class="text-sm font-medium text-gray-600 dark:text-gray-400 mb-1">Open</p>
            <p class="text-2xl font-semibold text-gray-700 dark:text-gray-200" x-text="stats.open">0</p>
        </div>

        <!-- Assigned -->
        <div class="p-4 bg-white rounded-lg shadow-xs dark:bg-gray-800">
            <p class="text-sm font-medium text-gray-600 dark:text-gray-400 mb-1">Assigned</p>
            <p class="text-2xl font-semibold text-gray-700 dark:text-gray-200" x-text="stats.assigned">0</p>
        </div>

        <!-- Resolved -->
        <div class="p-4 bg-white rounded-lg shadow-xs dark:bg-gray-800">
            <p class="text-sm font-medium text-gray-600 dark:text-gray-400 mb-1">Resolved</p>
            <p class="text-2xl font-semibold text-green-600 dark:text-green-400" x-text="stats.resolved">0</p>
        </div>

        <!-- Ignored -->
        <div class="p-4 bg-white rounded-lg shadow-xs dark:bg-gray-800">
            <p class="text-sm font-medium text-gray-600 dark:text-gray-400 mb-1">Ignored</p>
            <p class="text-2xl font-semibold text-gray-700 dark:text-gray-200" x-text="stats.ignored">0</p>
        </div>
    </div>

    <!-- Trend Chart and Top Files -->
    <div class="grid gap-6 mb-8 md:grid-cols-2">
        <!-- Trend Chart -->
        <div class="p-6 bg-white rounded-lg shadow-xs dark:bg-gray-800">
            <h4 class="mb-4 text-lg font-semibold text-gray-700 dark:text-gray-200">
                Violation Trends (Last 7 Scans)
            </h4>
            <div class="h-64 flex items-center justify-center text-gray-500 dark:text-gray-400">
                <template x-if="stats.trend && stats.trend.length > 0">
                    <div class="w-full">
                        <template x-for="(scan, idx) in stats.trend" :key="idx">
                            <div class="mb-2">
                                <div class="flex justify-between text-sm mb-1">
                                    <span x-text="new Date(scan.timestamp).toLocaleDateString()"></span>
                                    <span x-text="scan.violations"></span>
                                </div>
                                <div class="w-full bg-gray-200 rounded-full h-2">
                                    <div class="bg-purple-600 h-2 rounded-full"
                                         :style="'width: ' + Math.min(100, (scan.violations / Math.max(...stats.trend.map(s => s.violations)) * 100)) + '%'">
                                    </div>
                                </div>
                            </div>
                        </template>
                    </div>
                </template>
                <template x-if="!stats.trend || stats.trend.length === 0">
                    <p>No scan history available</p>
                </template>
            </div>
        </div>

        <!-- Top Violating Files -->
        <div class="p-6 bg-white rounded-lg shadow-xs dark:bg-gray-800">
            <h4 class="mb-4 text-lg font-semibold text-gray-700 dark:text-gray-200">
                Top Violating Files
            </h4>
            <div class="space-y-3">
                <template x-if="stats.top_files && stats.top_files.length > 0">
                    <template x-for="(file, idx) in stats.top_files.slice(0, 10)" :key="idx">
                        <div class="flex justify-between items-center">
                            <div class="flex-1 min-w-0">
                                <p class="text-sm font-medium text-gray-700 dark:text-gray-300 truncate" x-text="file.file"></p>
                            </div>
                            <span class="ml-2 px-2 py-1 text-xs font-semibold rounded-full"
                                  :class="{
                                      'bg-red-100 text-red-800': file.count >= 10,
                                      'bg-yellow-100 text-yellow-800': file.count >= 5 && file.count < 10,
                                      'bg-blue-100 text-blue-800': file.count < 5
                                  }"
                                  x-text="file.count">
                            </span>
                        </div>
                    </template>
                </template>
                <template x-if="!stats.top_files || stats.top_files.length === 0">
                    <p class="text-sm text-gray-500 dark:text-gray-400">No violations found</p>
                </template>
            </div>
        </div>
    </div>

    <!-- Violations by Rule and Module -->
    <div class="grid gap-6 mb-8 md:grid-cols-2">
        <!-- By Rule -->
        <div class="p-6 bg-white rounded-lg shadow-xs dark:bg-gray-800">
            <h4 class="mb-4 text-lg font-semibold text-gray-700 dark:text-gray-200">
                Top Rules Violated
            </h4>
            <div class="space-y-2">
                <template x-if="stats.by_rule && Object.keys(stats.by_rule).length > 0">
                    <template x-for="[rule_id, count] in Object.entries(stats.by_rule)" :key="rule_id">
                        <div class="flex justify-between items-center text-sm">
                            <span class="text-gray-700 dark:text-gray-300" x-text="rule_id"></span>
                            <span class="font-semibold text-gray-900 dark:text-gray-100" x-text="count"></span>
                        </div>
                    </template>
                </template>
                <template x-if="!stats.by_rule || Object.keys(stats.by_rule).length === 0">
                    <p class="text-sm text-gray-500 dark:text-gray-400">No violations found</p>
                </template>
            </div>
        </div>

        <!-- By Module -->
        <div class="p-6 bg-white rounded-lg shadow-xs dark:bg-gray-800">
            <h4 class="mb-4 text-lg font-semibold text-gray-700 dark:text-gray-200">
                Violations by Module
            </h4>
            <div class="space-y-2">
                <template x-if="stats.by_module && Object.keys(stats.by_module).length > 0">
                    <template x-for="[module, count] in Object.entries(stats.by_module)" :key="module">
                        <div class="flex justify-between items-center text-sm">
                            <span class="text-gray-700 dark:text-gray-300" x-text="module"></span>
                            <span class="font-semibold text-gray-900 dark:text-gray-100" x-text="count"></span>
                        </div>
                    </template>
                </template>
                <template x-if="!stats.by_module || Object.keys(stats.by_module).length === 0">
                    <p class="text-sm text-gray-500 dark:text-gray-400">No violations found</p>
                </template>
            </div>
        </div>
    </div>

    <!-- Quick Actions -->
    <div class="mb-8">
        <div class="p-6 bg-white rounded-lg shadow-xs dark:bg-gray-800">
            <h4 class="mb-4 text-lg font-semibold text-gray-700 dark:text-gray-200">
                Quick Actions
            </h4>
            <div class="flex flex-wrap gap-3">
                <a href="/admin/code-quality/violations"
                   class="flex items-center px-4 py-2 text-sm font-medium leading-5 text-white transition-colors duration-150 bg-purple-600 border border-transparent rounded-lg hover:bg-purple-700 focus:outline-none focus:shadow-outline-purple">
                    <span x-html="$icon('clipboard-list', 'w-4 h-4 mr-2')"></span>
                    View All Violations
                </a>
                <a href="/admin/code-quality/violations?status=open"
                   class="flex items-center px-4 py-2 text-sm font-medium leading-5 text-gray-700 dark:text-gray-300 transition-colors duration-150 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-600 focus:outline-none focus:shadow-outline-gray">
                    <span x-html="$icon('folder-open', 'w-4 h-4 mr-2')"></span>
                    Open Violations
                </a>
                <a href="/admin/code-quality/violations?severity=error"
                   class="flex items-center px-4 py-2 text-sm font-medium leading-5 text-gray-700 dark:text-gray-300 transition-colors duration-150 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-600 focus:outline-none focus:shadow-outline-gray">
                    <span x-html="$icon('exclamation', 'w-4 h-4 mr-2')"></span>
                    Errors Only
                </a>
            </div>
        </div>
    </div>

    <!-- Last Scan Info -->
    <div x-show="stats.last_scan" class="text-sm text-gray-600 dark:text-gray-400 text-center">
        Last scan: <span x-text="stats.last_scan ? new Date(stats.last_scan).toLocaleString() : 'Never'"></span>
    </div>
</div>
{% endblock %}
