<?php

namespace App\Console\Commands;

use App\Models\JobListing;
use App\Models\JobStage;
use Illuminate\Console\Command;

class StandardizeJobStages extends Command
{
    protected $signature = 'jobs:standardize-stages {--stages=5 : Number of stages to set for each job}';
    protected $description = 'Ensure all active job listings have the specified number of stages (default: 5)';

    /**
     * Default stage names when creating new stages
     */
    private array $defaultStageNames = [
        1 => 'Seleksi Administrasi',
        2 => 'Tes Kemampuan',
        3 => 'Wawancara Awal',
        4 => 'Penilaian Lanjutan',
        5 => 'Interview Final',
    ];

    public function handle(): int
    {
        $targetStages = (int) $this->option('stages');
        $jobs = JobListing::with('stages')->get();
        $updated = 0;

        foreach ($jobs as $job) {
            $currentMax = $job->stages->max('stage_number') ?? 0;
            $currentCount = $job->stages->count();

            if ($currentMax >= $targetStages) {
                $this->info("✓ {$job->title} sudah memiliki tahapan hingga stage {$currentMax}, dilewati.");
                continue;
            }

            $this->info("→ {$job->title}: max stage {$currentMax} → {$targetStages} tahapan");

            // Add missing stages (use max stage_number to avoid collisions)
            for ($i = $currentMax + 1; $i <= $targetStages; $i++) {
                $defaultName = $this->defaultStageNames[$i] ?? "Tahap {$i}";

                JobStage::create([
                    'job_listing_id' => $job->id,
                    'stage_number' => $i,
                    'name' => $defaultName,
                    'description' => "Tahapan seleksi ke-{$i}",
                    'form_fields' => $this->getDefaultFormFields($i),
                    'is_active' => true,
                    'sort_order' => $i,
                ]);

                $this->line("  + Stage {$i}: {$defaultName}");
            }

            $updated++;
        }

        $this->info("Selesai. {$updated} lowongan diperbarui ke {$targetStages} tahapan.");
        return 0;
    }

    /**
     * Get default form fields for a stage number
     */
    private function getDefaultFormFields(int $stageNumber): array
    {
        $fieldSets = [
            1 => [
                ['name' => 'motivasi', 'label' => 'Motivasi melamar posisi ini', 'type' => 'textarea', 'required' => true],
                ['name' => 'pengalaman', 'label' => 'Pengalaman kerja yang relevan', 'type' => 'textarea', 'required' => false],
            ],
            2 => [
                ['name' => 'keahlian', 'label' => 'Keahlian utama yang dimiliki', 'type' => 'textarea', 'required' => true],
                ['name' => 'pencapaian', 'label' => 'Pencapaian terbaik di pekerjaan sebelumnya', 'type' => 'textarea', 'required' => false],
            ],
            3 => [
                ['name' => 'kelebihan', 'label' => 'Kelebihan dan kekurangan Anda', 'type' => 'textarea', 'required' => true],
                ['name' => 'gaji_harapan', 'label' => 'Gaji yang diharapkan', 'type' => 'text', 'required' => true],
            ],
            4 => [
                ['name' => 'ketersediaan', 'label' => 'Kapan bisa mulai bekerja?', 'type' => 'text', 'required' => true],
                ['name' => 'referensi', 'label' => 'Referensi / kontak atasan sebelumnya (jika ada)', 'type' => 'textarea', 'required' => false],
            ],
            5 => [
                ['name' => 'komitmen', 'label' => 'Konfirmasi kesediaan dan komitmen Anda', 'type' => 'textarea', 'required' => true],
                ['name' => 'pertanyaan', 'label' => 'Pertanyaan untuk perusahaan', 'type' => 'textarea', 'required' => false],
            ],
        ];

        return $fieldSets[$stageNumber] ?? [
            ['name' => 'jawaban', 'label' => 'Jawaban Anda', 'type' => 'textarea', 'required' => true],
        ];
    }
}
