<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\Models\Penugasan;

class MigrateOldCatatanData extends Command
{
    protected $signature   = 'penugasan:migrate-catatan';
    protected $description = 'Migrasikan data lama dari kolom catatan_admin ke kolom terstruktur';

    public function handle()
    {
        $penugasans = Penugasan::whereNull('alamat_lokasi')
            ->whereNotNull('catatan_admin')
            ->get();

        $this->info("Ditemukan {$penugasans->count()} data lama yang perlu dimigrasi...");
        $updated = 0;

        foreach ($penugasans as $p) {
            $catatan = $p->catatan_admin;
            $nama    = null;
            $alamat  = null;
            $noSamb  = null;

            // ── Cari Nama ──────────────────────────────────
            // Pola: "Nama : ...", "Nama DR ...", "Nama: ..."
            if (preg_match('/Nama\s*[:\-]?\s*(.+?)(?=Alamat|Pekerjaan|No\.?|$)/is', $catatan, $m)) {
                $nama = trim($m[1]);
            }

            // ── Cari Alamat ─────────────────────────────────
            // Pola: "Alamat: ...", "Alamat BR. ..."
            if (preg_match('/Alamat\s*[:\-]?\s*(.+?)(?=Pekerjaan|No\.?|Nama|$)/is', $catatan, $m)) {
                $alamat = trim($m[1]);
            }

            // ── Cari No Sambungan ───────────────────────────
            // Pola: "no sambungan 0032", "No sambungannya 0008", "no samb 0032"
            if (preg_match('/no\.?\s*samb(?:ungan(?:nya)?)?\s*[:\-]?\s*([0-9]+)/is', $catatan, $m)) {
                $noSamb = trim($m[1]);
            }

            // Bersihkan trailing punct dari hasil parsing
            $nama   = $nama   ? rtrim($nama, ' ,;.')   : null;
            $alamat = $alamat ? rtrim($alamat, ' ,;.')  : null;

            // Hanya update kalau minimal ada salah satu yang berhasil di-parse
            if ($nama || $alamat || $noSamb) {
                $p->update([
                    'nama_pelanggan' => $nama,
                    'alamat_lokasi'  => $alamat,
                    'no_sambungan'   => $noSamb,
                ]);
                $updated++;
                $this->line("  ✅ ID #{$p->id_penugasan} → Nama: $nama | Alamat: $alamat | No: $noSamb");
            } else {
                $this->line("  ⚠️  ID #{$p->id_penugasan} → Format tidak dikenali: \"{$catatan}\"");
            }
        }

        $this->info("\n✅ Selesai! $updated dari {$penugasans->count()} data berhasil dimigrasi.");
        return 0;
    }
}
