@extends('layouts.admin.theme')

@section('content')
@php
    $routeBack      = $routeBack      ?? 'admin.projetosProgramas.index';
    $routeBackQuery = $routeBackQuery ?? null;
    $routeRelatorio = $routeRelatorio ?? 'admin.projetosProgramas.relatorio';
    $titulo         = $titulo         ?? __('Relatório dinâmico — Projetos e Programas');
    $allowedColumns = $allowedColumns ?? [];
    $allowedGroups  = $allowedGroups  ?? [];
    $selectedColumns = $selectedColumns ?? [];
    $group1 = $group1 ?? null;
    $group2 = $group2 ?? null;
    $group3 = $group3 ?? null;

    $backQuery = $routeBackQuery ?? request()->except(['columns', 'group1', 'group2', 'group3']);

    $routeImprimir = ($routeRelatorio ?? '') === 'admin.dashboardEstrategico.projetosProgramas.relatorio'
        ? 'admin.dashboardEstrategico.projetosProgramas.relatorio.imprimir'
        : 'admin.projetosProgramas.relatorio.imprimir';

    // Colunas de dados (exceto denominacao — sempre exibida na 1ª coluna)
    $colsData = array_filter(
        $selectedColumns,
        fn ($c) => $c !== 'denominacao' && isset($allowedColumns[$c])
    );
    // Total de colunas: 1 (nome) + cols dados + 3 (qtd, previsto, disponível)
    $totalColCount = 1 + count($colsData) + 3;

    $presets = [
        'padrao' => [
            'label'   => __('Padrão'),
            'columns' => ['denominacao', 'secretaria', 'bairro'],
            'groups'  => ['secretaria', 'bairro', ''],
        ],
        'bairro' => [
            'label'   => __('Bairro'),
            'columns' => ['denominacao', 'secretaria'],
            'groups'  => ['bairro', '', ''],
        ],
        'financeiro' => [
            'label'   => __('Financeiro'),
            'columns' => ['denominacao', 'secretaria', 'orcamento_previsto', 'orcamento_disponivel', 'situacao_cadastro'],
            'groups'  => ['secretaria', '', ''],
        ],
        'execucao' => [
            'label'   => __('Execução'),
            'columns' => ['denominacao', 'secretaria', 'etapa', 'andamento', 'prazo'],
            'groups'  => ['secretaria', 'etapa', ''],
        ],
    ];

    $depthClasses = ['', 'ps-3', 'ps-4', 'ps-5'];
@endphp

<div class="container-fluid pb-4">

    {{-- Cabeçalho --}}
    <div class="d-flex justify-content-between align-items-center mb-3 flex-wrap gap-2">
        <div>
            <h4 class="mb-0">{{ $titulo }}</h4>
            <p class="text-muted small mb-0">{{ __('Monte a visão que você precisa: escolha colunas, agrupe e gere.') }}</p>
        </div>
        <div class="d-flex gap-2">
            <a href="{{ route($routeBack, $backQuery) }}" class="btn btn-outline-secondary btn-sm">
                <i class="fa-solid fa-arrow-left me-1" aria-hidden="true"></i>{{ __('Voltar') }}
            </a>
        </div>
    </div>

    {{-- Formulário de configuração --}}
    <div class="card shadow-sm mb-4"
         data-pp-relatorio-presets
         data-presets='@json($presets)'>
        <div class="card-body">
            <form method="get"
                  action="{{ route($routeRelatorio) }}"
                  data-pp-relatorio-form>

                {{-- Seção 0: Visões rápidas --}}
                <div class="mb-3">
                    <p class="text-muted small mb-2 fw-semibold text-uppercase">
                        <i class="fa-solid fa-bolt me-1" aria-hidden="true"></i>{{ __('Visões rápidas') }}
                    </p>
                    <div class="d-flex flex-wrap gap-2">
                        @foreach($presets as $key => $preset)
                            <button type="button"
                                    class="btn btn-outline-primary btn-sm"
                                    data-pp-relatorio-preset="{{ $key }}">
                                {{ $preset['label'] }}
                            </button>
                        @endforeach
                    </div>
                </div>

                <hr class="my-3">

                {{-- Seções 1 e 2 lado a lado em telas maiores --}}
                <div class="row g-4">

                    {{-- Seção 1: Colunas --}}
                    <div class="col-12 col-lg-7">
                        <p class="fw-semibold mb-2">{{ __('1. Colunas a exibir') }}</p>
                        <div class="row g-2">
                            @foreach($allowedColumns as $key => $colLabel)
                                <div class="col-6 col-sm-4">
                                    <div class="form-check">
                                        <input class="form-check-input"
                                               type="checkbox"
                                               id="col_{{ $key }}"
                                               name="columns[]"
                                               value="{{ $key }}"
                                               @checked(in_array($key, $selectedColumns, true))>
                                        <label class="form-check-label small" for="col_{{ $key }}">
                                            {{ $colLabel }}
                                        </label>
                                    </div>
                                </div>
                            @endforeach
                        </div>
                        <div class="alert alert-warning small mb-0 mt-2 d-none" role="alert" data-pp-relatorio-too-many-cols-hint>
                            {{ __('Muitas colunas podem ficar ilegíveis na impressão. Prefira uma visão rápida ou reduza a seleção.') }}
                        </div>
                        <p class="text-muted small mb-0 mt-2">
                            {{ __('A coluna "Denominação" é sempre exibida como primeiro campo.') }}
                        </p>
                    </div>

                    {{-- Seção 2: Agrupamento --}}
                    <div class="col-12 col-lg-5">
                        <p class="fw-semibold mb-2">{{ __('2. Agrupar por (opcional)') }}</p>
                        <div class="d-flex flex-column gap-2">
                            <div>
                                <label class="form-label small mb-1" for="group1">{{ __('1º nível') }}</label>
                                <select name="group1" id="group1" class="form-select form-select-sm">
                                    <option value="">{{ __('— sem agrupamento —') }}</option>
                                    @foreach($allowedGroups as $key => $groupLabel)
                                        <option value="{{ $key }}" @selected($group1 === $key)>{{ $groupLabel }}</option>
                                    @endforeach
                                </select>
                            </div>
                            <div>
                                <label class="form-label small mb-1" for="group2">{{ __('2º nível') }}</label>
                                <select name="group2" id="group2" class="form-select form-select-sm">
                                    <option value="">{{ __('— sem agrupamento —') }}</option>
                                    @foreach($allowedGroups as $key => $groupLabel)
                                        <option value="{{ $key }}" @selected($group2 === $key)>{{ $groupLabel }}</option>
                                    @endforeach
                                </select>
                            </div>
                            <div>
                                <label class="form-label small mb-1" for="group3">{{ __('3º nível') }}</label>
                                <select name="group3" id="group3" class="form-select form-select-sm">
                                    <option value="">{{ __('— sem agrupamento —') }}</option>
                                    @foreach($allowedGroups as $key => $groupLabel)
                                        <option value="{{ $key }}" @selected($group3 === $key)>{{ $groupLabel }}</option>
                                    @endforeach
                                </select>
                            </div>
                        </div>
                        <p class="text-muted small mb-0 mt-2">
                            {{ __('Subtotais são gerados automaticamente por grupo.') }}
                        </p>
                    </div>
                </div>

                <hr class="my-3">

                {{-- CTA --}}
                <div class="d-flex gap-2 align-items-center flex-wrap">
                    <button type="submit" class="btn btn-primary btn-sm">
                        <i class="fa-solid fa-chart-column me-1" aria-hidden="true"></i>{{ __('Gerar relatório') }}
                    </button>
                    <button type="button"
                        class="btn btn-outline-secondary btn-sm"
                        data-pp-relatorio-print
                        data-print-base-url="{{ route($routeImprimir) }}">
                        <i class="fa fa-print me-1" aria-hidden="true"></i>{{ __('Imprimir relatório') }}
                    </button>
                    <button type="button" class="btn btn-outline-secondary btn-sm" data-pp-relatorio-columns-all>
                        {{ __('Selecionar tudo') }}
                    </button>
                    <button type="button" class="btn btn-outline-secondary btn-sm" data-pp-relatorio-clear-all>
                        {{ __('Limpar tudo') }}
                    </button>
                    @if(!empty($reportRows))
                        <span class="ms-auto badge bg-secondary-subtle text-body small">
                            {{ __(':n registro(s) encontrado(s)', ['n' => $reportRows[array_key_last($reportRows)]['totals']['count'] ?? '—']) }}
                        </span>
                    @endif
                </div>

            </form>
        </div>
    </div>

    {{-- Resultado --}}
    @if(!empty($reportRows))
        <div class="card shadow-sm">
            <div class="card-header py-2 d-flex justify-content-between align-items-center flex-wrap gap-2">
                <span class="fw-semibold small">{{ __('Resultado') }}</span>
            </div>
            <div class="card-body p-0">
                <div class="table-responsive">
                    <table class="table table-sm table-bordered align-middle mb-0 small">
                        <thead class="table-light">
                            <tr>
                                <th class="text-start">{{ __('Projeto / Grupo') }}</th>
                                @foreach($colsData as $colKey)
                                    <th class="text-center">{{ $allowedColumns[$colKey] }}</th>
                                @endforeach
                                <th class="text-center text-nowrap">{{ __('Qtd.') }}</th>
                                <th class="text-end text-nowrap">{{ __('Prev.') }}</th>
                                <th class="text-end text-nowrap">{{ __('Disp.') }}</th>
                            </tr>
                        </thead>
                        <tbody>
                            @foreach($reportRows as $row)
                                @php
                                    $type  = (string) ($row['type'] ?? 'data');
                                    $depth = (int) ($row['depth'] ?? 0);
                                    $depthClass = $depthClasses[min($depth, 3)];
                                @endphp

                                @if($type === 'group_header')
                                    {{-- Cabeçalho de grupo: label em colspan + totais à direita --}}
                                    <tr class="table-primary">
                                        <td colspan="{{ 1 + count($colsData) }}" class="fw-semibold {{ $depthClass }}">
                                            {{ $row['label'] ?? '' }}
                                        </td>
                                        <td class="text-center fw-semibold text-nowrap">
                                            {{ $row['totals']['count'] ?? '' }}
                                        </td>
                                        <td class="text-end fw-semibold text-nowrap">
                                            R$ {{ number_format((float)($row['totals']['orcamento_previsto'] ?? 0), 2, ',', '.') }}
                                        </td>
                                        <td class="text-end fw-semibold text-nowrap">
                                            R$ {{ number_format((float)($row['totals']['orcamento_disponivel'] ?? 0), 2, ',', '.') }}
                                        </td>
                                    </tr>

                                @elseif($type === 'subtotal')
                                    {{-- Subtotal: label alinhado à direita + totais --}}
                                    <tr class="table-light text-muted">
                                        <td colspan="{{ 1 + count($colsData) }}"
                                            class="text-end fst-italic small {{ $depthClass }}">
                                            {{ __('Subtotal') }}
                                        </td>
                                        <td class="text-center fw-semibold text-nowrap">
                                            {{ $row['totals']['count'] ?? '' }}
                                        </td>
                                        <td class="text-end fw-semibold text-nowrap">
                                            R$ {{ number_format((float)($row['totals']['orcamento_previsto'] ?? 0), 2, ',', '.') }}
                                        </td>
                                        <td class="text-end fw-semibold text-nowrap">
                                            R$ {{ number_format((float)($row['totals']['orcamento_disponivel'] ?? 0), 2, ',', '.') }}
                                        </td>
                                    </tr>

                                @elseif($type === 'grand_total')
                                    {{-- Total geral --}}
                                    <tr class="fw-bold table-secondary">
                                        <td colspan="{{ 1 + count($colsData) }}"
                                            class="text-end">
                                            {{ __('Total geral') }}
                                        </td>
                                        <td class="text-center text-nowrap">
                                            {{ $row['totals']['count'] ?? '' }}
                                        </td>
                                        <td class="text-end text-nowrap">
                                            R$ {{ number_format((float)($row['totals']['orcamento_previsto'] ?? 0), 2, ',', '.') }}
                                        </td>
                                        <td class="text-end text-nowrap">
                                            R$ {{ number_format((float)($row['totals']['orcamento_disponivel'] ?? 0), 2, ',', '.') }}
                                        </td>
                                    </tr>

                                @else
                                    {{-- Linha de dado --}}
                                    <tr>
                                        <td class="{{ $depthClass }}">{{ $row['label'] ?? '' }}</td>
                                        @foreach($colsData as $colKey)
                                            <td class="text-center">
                                                @if($colKey === 'prazo')
                                                    {!! nl2br(e($row['cols'][$colKey] ?? '')) !!}
                                                @else
                                                    {{ $row['cols'][$colKey] ?? '' }}
                                                @endif
                                            </td>
                                        @endforeach
                                        <td class="text-center text-nowrap">1</td>
                                        <td class="text-end text-nowrap">
                                            R$ {{ number_format((float)($row['totals']['orcamento_previsto'] ?? 0), 2, ',', '.') }}
                                        </td>
                                        <td class="text-end text-nowrap">
                                            R$ {{ number_format((float)($row['totals']['orcamento_disponivel'] ?? 0), 2, ',', '.') }}
                                        </td>
                                    </tr>
                                @endif
                            @endforeach
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    @elseif(request()->has('columns') || request()->has('group1'))
        <div class="alert alert-info">
            {{ __('Nenhum projeto encontrado para a configuração selecionada.') }}
        </div>
    @endif

</div>

<script src="{{ asset('pmar/js/projetos-programas-relatorio.js') }}"></script>
@endsection
