<?php
require_once __DIR__ . '/config.php';
require_once __DIR__ . '/includes/layout.php';

$termo    = trim(strip_tags($_GET['q']    ?? ''));
$filtroData = trim($_GET['data'] ?? ''); // YYYY-MM-DD

$res = [];
$tot = 0;

// Load auxiliary indexes
$datas   = [];
$titulos = [];
$dpth = __DIR__ . '/dados/datas-index.json';
$tpth = __DIR__ . '/dados/titulos-index.json';
if(file_exists($dpth)){$j=@file_get_contents($dpth);if($j)$datas=json_decode($j,true)??[];}
if(file_exists($tpth)){$j=@file_get_contents($tpth);if($j)$titulos=json_decode($j,true)??[];}

// Search
$ip = __DIR__ . '/dados/busca-index.json';
if($termo !== '' || $filtroData !== ''){
  if(file_exists($ip)){
    $j=@file_get_contents($ip);
    if($j){
      $idx=json_decode($j,true);
      if(is_array($idx)){
        $tot=count($idx);
        $pals=($termo!=='')?preg_split('/\s+/',mb_strtolower($termo)):[];
        foreach($idx as $ed=>$txt){
          $edKey=(string)(int)$ed;
          // Date filter
          if($filtroData!=='' && ($datas[$edKey]??'')!==$filtroData) continue;
          // Text filter
          if($pals){
            $tl=mb_strtolower($txt);$sc=0;
            foreach($pals as $p){if($p!==''&&mb_strpos($tl,$p)!==false)$sc++;}
            if($sc!=count($pals))continue;
            $pos=mb_strpos($tl,$pals[0]);$st=max(0,$pos-100);
            $snp=($st>0?'...':'').mb_substr($txt,$st,280).'...';
            foreach($pals as $p){if($p!=='')$snp=preg_replace('/('.preg_quote($p,'/').')/iu','<mark>$1</mark>',$snp);}
          }else{
            $snp=mb_substr($txt,0,280).'...';
          }
          $res[]=['ed'=>(int)$ed,'snp'=>$snp,'data'=>$datas[$edKey]??'','titulo'=>$titulos[$edKey]??''];
        }
        usort($res,fn($a,$b)=>$b['ed']-$a['ed']);
      }
    }
  }
}

// Calendar: all dates that have editions
$calDates=array_values(array_unique(array_filter(array_values($datas))));
sort($calDates);
$calJson=json_encode($calDates,JSON_UNESCAPED_UNICODE);

do_head('Pesquisar - Diário Oficial de Narandiba','Pesquise nas edições do Diário Oficial de Narandiba');
?>
<style>
mark{background:#fff176;padding:0 2px;border-radius:2px;}
.bl{display:flex;gap:28px;max-width:1100px;margin:36px auto;padding:0 20px;align-items:flex-start;}
.bs{width:220px;flex-shrink:0;}
.bm{flex:1;min-width:0;}
/* Mini-cal */
#mc{background:#fff;border:1px solid #dde3ea;border-radius:10px;padding:14px;box-shadow:0 1px 4px rgba(0,0,0,.06);}
.mc-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;}
.mc-head button{background:none;border:none;cursor:pointer;font-size:1.2rem;color:#1a5276;padding:2px 8px;border-radius:4px;line-height:1;}
.mc-head button:hover{background:#eaf2fb;}
.mc-head span{font-weight:700;color:#1a5276;font-size:.93rem;}
.mc-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;}
.mc-dow{text-align:center;font-weight:700;color:#aaa;padding:3px 0;font-size:.72rem;}
.mc-day{text-align:center;padding:5px 2px;border-radius:5px;cursor:default;color:#666;font-size:.82rem;line-height:1.4;}
.mc-has{background:#1a5276;color:#fff!important;cursor:pointer;font-weight:700;}
.mc-has:hover{background:#2471a3;}
.mc-today{outline:2px solid #e67e22;outline-offset:-1px;}
.mc-sel{background:#e67e22!important;color:#fff!important;}
.mc-empty{visibility:hidden;}
.cal-hd{font-size:.82rem;font-weight:700;color:#1a5276;text-transform:uppercase;letter-spacing:.06em;margin-bottom:8px;}
.fil-tag{margin-top:10px;font-size:.8rem;color:#555;background:#fff;border:1px solid #dde3ea;border-radius:6px;padding:8px 10px;}
.fil-tag strong{display:block;color:#1a5276;}
.fil-rm{display:inline-block;margin-top:4px;color:#c0392b;cursor:pointer;font-size:.8rem;text-decoration:none;}
/* Result cards */
.rc{border:1px solid #e0e0e0;border-radius:8px;padding:16px 20px;margin-bottom:14px;background:#fff;}
.rc-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:8px;}
.rc-info strong{font-size:1rem;color:#222;}
.rc-info .rc-date{color:#888;font-size:.83rem;margin-left:8px;}
.rc-titulo{color:#555;font-size:.87rem;margin-top:3px;font-style:italic;}
.rc-snp{color:#444;font-size:.91rem;line-height:1.65;margin:0;border-top:1px solid #f2f2f2;padding-top:8px;}
.btn-pdf{background:#1a5276;color:#fff;padding:7px 14px;border-radius:5px;text-decoration:none;font-size:.87rem;white-space:nowrap;flex-shrink:0;}
.btn-pdf:hover{background:#2471a3;}
@media(max-width:700px){.bl{flex-direction:column;}.bs{width:100%;}}
</style>

<div class="bl">
  <!-- SIDEBAR -->
  <div class="bs">
    <div class="cal-hd">📅 Calendário</div>
    <div id="mc">
      <div class="mc-head">
        <button id="mc-prev">&#8249;</button>
        <span id="mc-lbl"></span>
        <button id="mc-next">&#8250;</button>
      </div>
      <div class="mc-grid" id="mc-grid"></div>
    </div>
    <?php if($filtroData!==''): ?>
    <div class="fil-tag">
      <strong>Filtrando por data:</strong>
      <?php echo date('d/m/Y',strtotime($filtroData));?>
      <a class="fil-rm" href="busca-pdf.php<?php echo $termo?'?q='.urlencode($termo):'';?>">✕ Remover filtro</a>
    </div>
    <?php endif; ?>
  </div>

  <!-- MAIN -->
  <div class="bm">
    <h1 style="font-size:1.45rem;margin-bottom:18px;">🔍 Pesquisar no Diário Oficial</h1>
    <form method="get" action="" style="display:flex;gap:10px;margin-bottom:22px;">
      <input type="text" name="q" value="<?php echo htmlspecialchars($termo,ENT_QUOTES);?>"
        placeholder="Ex: licitacao, decreto, contrato..."
        style="flex:1;padding:10px 14px;font-size:1rem;border:2px solid #ccc;border-radius:6px;">
      <?php if($filtroData!==''): ?>
      <input type="hidden" name="data" value="<?php echo htmlspecialchars($filtroData,ENT_QUOTES);?>">
      <?php endif; ?>
      <button type="submit" style="padding:10px 22px;background:#1a5276;color:#fff;border:none;border-radius:6px;font-size:1rem;cursor:pointer;">Pesquisar</button>
    </form>

    <?php if($termo!==''||$filtroData!==''): ?>
    <p style="color:#555;margin-bottom:18px;">
      <?php if(count($res)>0): ?>
        <strong><?php echo count($res);?></strong> edição(ões) encontrada(s)<?php if($termo): ?> para <em>"<?php echo htmlspecialchars($termo,ENT_QUOTES);?>"</em><?php endif; ?><?php if($filtroData!==''): ?> em <strong><?php echo date('d/m/Y',strtotime($filtroData));?></strong><?php endif; ?>
        <span style="color:#999;font-size:.83rem;">(índice: <?php echo $tot;?> edições)</span>
      <?php else: ?>
        Nenhum resultado encontrado<?php if($termo): ?> para <em>"<?php echo htmlspecialchars($termo,ENT_QUOTES);?>"</em><?php endif; ?>.
      <?php endif; ?>
    </p>
    <?php foreach($res as $r):
      $ed=$r['ed'];
      $edv=str_pad($ed,3,'0',STR_PAD_LEFT);
      $pdf='/pdfs/DO_Narandiba_Edicao_'.$edv.'.pdf';
      $dataFmt=$r['data']?date('d/m/Y',strtotime($r['data'])):'';
    ?>
    <div class="rc">
      <div class="rc-head">
        <div class="rc-info">
          <strong>Edição nº <?php echo $ed;?></strong>
          <?php if($dataFmt): ?><span class="rc-date">📅 <?php echo $dataFmt;?></span><?php endif; =?>
          <?php if($r['titulo']!==''): ?>
          <div class="rc-titulo"><?php echo htmlspecialchars($r['titulo'],ENT_QUOTES);?></div>
          <?php endif; ?>
        </div>
        <a class="btn-pdf" href="<?php echo htmlspecialchars($pdf,ENT_QUOTES);?>" target="_blank">📄 Abrir PDF</a>
      </div>
      <p class="rc-snp"><?php echo $r['snp'];?></p>
    </div>
    <?php endforeach; ?>
    <?php else: ?>
    <p style="color:#777;">Digite um termo acima para pesquisar em <?php echo $tot?:0865;?> edições, ou clique em uma data no calendário para ver as edições do dia.</p>
    <?php endif; ?>
  </div>
</div>

<script>
(function(){
  var calDates=<?php echo $calJson;?>;
  var ds={};calDates.forEach(function(d){ds[d]=1;});
  var filtro=<?php echo $filtroData?json_encode($filtroData):'null';?>;
  var termo=<?php echo json_encode($termo);?>;
  var MESES=['Janeiro','Fevereiro','Março','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'[];
  var DOWS=['D','S','T','Q','Q','S','S'];
  var now=new Date();
  var cy=now.getFullYear(),cm=now.getMonth();
  function p2(n){return n<10?'0'+n:''+n;}
  function render(y,m){
    document.getElementById('mc-lbl').textContent=MESES[m]+' '+y;
    var g=document.getElementById('mc-grid');g.innerHTML='';
    DOWS.forEach(function(d){var s=document.createElement('span');s.className='mc-dow';s.textContent=d;g.appendChild(s);});
    var fd=new Date(y,m,1).getDay();
    for(var i=0;i<fd;i++){var e=document.createElement('span');e.className='mc-day mc-empty';e.textContent='X';g.appendChild(e);}
    var dim=new Date(y,m+1,0).getDate();
    var todayStr=now.getFullYear()+'-'+p2(now.getMonth()+1)+'-'+p2(now.getDate());
    for(var d=1;d<=dim;d++){
      var dateStr=y+'-'+p2(m+1)+'-'+p2(d);
      var sp=document.createElement('span');sp.className='mc-day';sp.textContent=d;
      if(ds[dateStr]){
        sp.classList.add('mc-has');
        sp.title='Edição publicada em '+p2(d)+'/'+p2(m+1)+'/'+y;
        (function(dt){sp.addEventListener('click',function(){
          var url='busca-pdf.php?data='+dt;
          if(termo)url+='&q='+encodeURIComponent(termo);
          window.location=url;
        });})(dateStr);
      }
      if(dateStr===todayStr)sp.classList.add('mc-today');
      if(dateStr===filtro)sp.classList.add('mc-sel');
      g.appendChild(sp);
    }
  }
  render(cy,cm);
  document.getElementById('mc-prev').addEventListener('click',function(){if(--cm<0){cm=11;cy--;}render(cy,cm);});
  document.getElementById('mc-next').addEventListener('click',function(){if(++cm>11){cm=0;cy++;}render(cy,cm);});
})();
</script>
<?php do_footer();?>
