<?php
require_once __DIR__ . '/helpers.php';
require_once __DIR__ . '/auth.php';
require_once __DIR__ . '/stone_core_common.php';
require_login();
require_role(['admin']);
$page_title = 'Taş Düzeltmeleri';
$active_menu = 'stone_corrections';
$user = current_user();
$pdo = db();

if (is_post()) {
    verify_csrf();
    $action = $_POST['action'] ?? '';
    try {
        if ($action === 'merge_stone_sku') {
            $sourceSku = trim((string)($_POST['source_sku'] ?? ''));
            $targetSku = trim((string)($_POST['target_sku'] ?? ''));
            $reason = trim((string)($_POST['reason'] ?? ''));
            if ($sourceSku === '' || $targetSku === '') throw new RuntimeException('Kaynak ve hedef taş SKU zorunlu.');
            $source = stone_get_by_sku($sourceSku);
            $target = stone_get_by_sku($targetSku);
            if (!$source) throw new RuntimeException('Kaynak taş SKU bulunamadı: '.$sourceSku);
            if (!$target) throw new RuntimeException('Hedef taş SKU bulunamadı: '.$targetSku);
            $result = stone_merge_single_stone((int)$source['id'], (int)$target['id'], $reason, (int)$user['id']);
            $_SESSION['flash'] = ['type'=>'success','msg'=>'Taş kartı taşındı/birleştirildi: '.$result['source']['stone_sku'].' → '.$result['target']['stone_sku'].' | Lot: '.$result['lot_count'].' | Hareket: '.$result['movement_count']];
        }

        if ($action === 'merge_size_series') {
            $cutId = (int)($_POST['cut_id'] ?? 0);
            $sourceSizeId = (int)($_POST['source_size_id'] ?? 0);
            $targetSizeId = (int)($_POST['target_size_id'] ?? 0);
            $reason = trim((string)($_POST['size_reason'] ?? ''));
            $result = stone_merge_size_series($cutId, $sourceSizeId, $targetSizeId, $reason, (int)$user['id']);
            $_SESSION['flash'] = ['type'=>'success','msg'=>'Ölçü serisi düzeltildi: '.$result['source_size']['size_label'].' → '.$result['target_size']['size_label'].' | Taş: '.$result['moved_stones'].' | Lot: '.$result['moved_lots'].' | Hareket: '.$result['moved_movements']];
        }
    } catch (Throwable $e) {
        $_SESSION['flash'] = ['type'=>'error','msg'=>'İşlem yapılamadı: '.$e->getMessage()];
    }
    redirect('stone_corrections.php');
}

$cuts = $pdo->query("SELECT * FROM stone_cuts ORDER BY cut_name")->fetchAll();
$sizes = $pdo->query("SELECT ss.*, cu.cut_name FROM stone_sizes ss JOIN stone_cuts cu ON cu.id=ss.cut_id ORDER BY cu.cut_name, COALESCE(ss.diameter_mm, ss.length_mm), ss.width_mm")->fetchAll();
$recent = [];
try {
    $recent = $pdo->query("SELECT a.*, u.full_name FROM stone_admin_audit_logs a LEFT JOIN users u ON u.id=a.actor_user_id WHERE a.action_type IN ('stone_merge','size_series_merge','purchase_void','purchase_correction_new','size_deactivate','size_series_delete') ORDER BY a.created_at DESC LIMIT 50")->fetchAll();
} catch (Throwable $e) {}
include __DIR__ . '/includes/layout.php';
?>
<div class="ph">
  <div><h1>Taş Düzeltmeleri</h1><p>Admin burada yanlış taş kartlarını/ölçüleri doğru kayda taşır. Hard delete yerine stok, cari ve geçmiş bağlantıları korunarak düzeltilir.</p></div>
  <div style="display:flex;gap:8px"><a class="btn btn-secondary" href="stone_transactions.php">Alım Hareketleri</a><a class="btn btn-secondary" href="stone_sizes_admin.php">Taş Ölçüleri</a></div>
</div>

<div class="flash flash-info">
  Kural: Finansal değer yanlışsa alımı <b>iptal et / yeni doğru alım gir</b>. Sadece taş kimliği/ölçüsü yanlışsa <b>taşı/birleştir</b>. Böylece cari bakiyesi bozulmaz, normal ekranda yanlış kart görünmez.
</div>

<div class="card">
  <div class="card-header"><span class="card-title">Tek Taş Kartını Başka Taşa Taşı / Birleştir</span></div>
  <div class="card-body">
    <p class="c-mt">Örnek: <span class="mn">ST-DIA-RND-0235-CLR</span> yanlış açıldıysa ve doğrusu <span class="mn">ST-DIA-RND-0225-CLR</span> ise kaynak taşın tüm alım lotları, stok hareketleri ve cari bağlantılı notları hedef taşa taşınır. Kaynak taş pasife alınır.</p>
    <form method="post" onsubmit="return confirm('Kaynak taşın bağlı tüm lot/stok hareketleri hedef taşa taşınacak. Devam edilsin mi?')" style="display:grid;grid-template-columns:1fr 1fr 2fr 160px;gap:12px;align-items:end">
      <?= csrf_field() ?><input type="hidden" name="action" value="merge_stone_sku">
      <div><label class="form-label">Yanlış / Kaynak Taş SKU</label><input class="form-control mn" name="source_sku" placeholder="ST-DIA-RND-0235-CLR" required></div>
      <div><label class="form-label">Doğru / Hedef Taş SKU</label><input class="form-control mn" name="target_sku" placeholder="ST-DIA-RND-0225-CLR" required></div>
      <div><label class="form-label">Düzeltme Nedeni</label><input class="form-control" name="reason" placeholder="Örn: 2.35 olarak girilmiş ama gerçek ölçü 2.25" required></div>
      <div><button class="btn btn-primary" type="submit">Taşı / Birleştir</button></div>
    </form>
  </div>
</div>

<div class="card">
  <div class="card-header"><span class="card-title">Ölçü Serisini Toplu Düzelt</span></div>
  <div class="card-body">
    <p class="c-mt">Örnek: Round 2.35 mm ölçüsü komple yanlış açıldıysa, aynı kesimdeki 2.35 mm serisini 2.25 mm serisine taşı. Sistem aynı cins/renk kombinasyonlarını hedef ölçüde oluşturur, bağlı lot/stok hareketlerini taşır ve yanlış ölçüyü pasife alır.</p>
    <form method="post" onsubmit="return confirm('Yanlış ölçü serisindeki tüm taş kartları doğru ölçüye taşınacak ve yanlış ölçü pasife alınacak. Devam edilsin mi?')" style="display:grid;grid-template-columns:190px 1fr 1fr 2fr 150px;gap:12px;align-items:end">
      <?= csrf_field() ?><input type="hidden" name="action" value="merge_size_series">
      <div><label class="form-label">Kesim</label><select class="form-control" name="cut_id" id="cutId" required><option value="">Seç</option><?php foreach($cuts as $c): ?><option value="<?= (int)$c['id'] ?>"><?= e($c['cut_name']) ?></option><?php endforeach; ?></select></div>
      <div><label class="form-label">Yanlış / Kaynak Ölçü</label><select class="form-control" name="source_size_id" id="sourceSize" required><option value="">Önce kesim seç</option><?php foreach($sizes as $s): ?><option data-cut="<?= (int)$s['cut_id'] ?>" value="<?= (int)$s['id'] ?>"><?= e($s['cut_name'].' — '.$s['size_label'].' '.((int)$s['is_active']?'':'(pasif)')) ?></option><?php endforeach; ?></select></div>
      <div><label class="form-label">Doğru / Hedef Ölçü</label><select class="form-control" name="target_size_id" id="targetSize" required><option value="">Önce kesim seç</option><?php foreach($sizes as $s): ?><option data-cut="<?= (int)$s['cut_id'] ?>" value="<?= (int)$s['id'] ?>"><?= e($s['cut_name'].' — '.$s['size_label'].' '.((int)$s['is_active']?'':'(pasif)')) ?></option><?php endforeach; ?></select></div>
      <div><label class="form-label">Düzeltme Nedeni</label><input class="form-control" name="size_reason" placeholder="Örn: 2.35 talebi hatalı; gerçek ölçü 2.25" required></div>
      <div><button class="btn btn-primary" type="submit">Seriyi Düzelt</button></div>
    </form>
  </div>
</div>

<div class="card">
  <div class="card-header"><span class="card-title">Son Düzeltme Geçmişi</span><span class="c-mt"><?= count($recent) ?> kayıt</span></div>
  <div class="table-wrap"><table><thead><tr><th>Tarih</th><th>Kullanıcı</th><th>İşlem</th><th>Nesne</th><th>Not</th></tr></thead><tbody>
    <?php foreach($recent as $r): ?><tr><td><?= e($r['created_at']) ?></td><td><?= e($r['full_name']) ?></td><td><?= e($r['action_type']) ?></td><td><?= e($r['entity_type'].' #'.$r['entity_id']) ?></td><td><?= e($r['note']) ?></td></tr><?php endforeach; if(!$recent): ?><tr><td colspan="5" class="c-mt">Henüz düzeltme kaydı yok.</td></tr><?php endif; ?>
  </tbody></table></div>
</div>
<script>
function filterCorrectionSizes(){
  const cut = document.getElementById('cutId')?.value;
  ['sourceSize','targetSize'].forEach(id => {
    const sel = document.getElementById(id); if(!sel) return;
    [...sel.options].forEach((o,i)=>{ if(i===0){o.hidden=false;return;} o.hidden = cut && o.dataset.cut !== cut; });
    if(sel.selectedOptions[0] && sel.selectedOptions[0].hidden) sel.value='';
  });
}
document.getElementById('cutId')?.addEventListener('change', filterCorrectionSizes); filterCorrectionSizes();
</script>
<?php include __DIR__ . '/includes/layout_end.php'; ?>
