<?php

namespace App\Http\Controllers;

use App\Models\Job;
use App\Models\JobVariant;
use App\Models\Quote;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class JobVariantController extends Controller
{
    public function index(Job $job)
    {
        $job->load(['variants.respondedBy', 'variants.quote', 'quotes']);
        return view('variants.index', compact('job'));
    }

    public function store(Request $request, Job $job)
    {
        $data = $request->validate([
            'quote_id'         => 'nullable|exists:quotes,id',
            'name'             => 'required|string|max:255',
            'description'      => 'nullable|string',
            'price_adjustment' => 'nullable|numeric',
            'internal_notes'   => 'nullable|string',
        ]);

        $job->variants()->create([
            'quote_id'         => $data['quote_id'] ?? null,
            'name'             => $data['name'],
            'description'      => $data['description'] ?? null,
            'price_adjustment' => $data['price_adjustment'] ?? 0,
            'status'           => 'pending',
            'internal_notes'   => $data['internal_notes'] ?? null,
        ]);

        return redirect()->route('jobs.variants', $job)
            ->with('success', 'Variant added.');
    }

    public function accept(Request $request, Job $job, JobVariant $variant)
    {
        $data = $request->validate([
            'client_notes' => 'nullable|string',
        ]);

        $variant->update([
            'status'       => 'accepted',
            'responded_by' => Auth::id(),
            'responded_at' => now(),
            'client_notes' => $data['client_notes'] ?? null,
        ]);

        // If linked to a quote, update the quote status to accepted
        if ($variant->quote_id) {
            $variant->quote?->update(['status' => 'accepted']);
        }

        return back()->with('success', 'Variant accepted and quote updated.');
    }

    public function reject(Request $request, Job $job, JobVariant $variant)
    {
        $data = $request->validate([
            'client_notes' => 'nullable|string',
        ]);

        $variant->update([
            'status'       => 'rejected',
            'responded_by' => Auth::id(),
            'responded_at' => now(),
            'client_notes' => $data['client_notes'] ?? null,
        ]);

        return back()->with('success', 'Variant rejected.');
    }

    public function destroy(Job $job, JobVariant $variant)
    {
        $variant->delete();
        return back()->with('success', 'Variant deleted.');
    }
}
