<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\StoreAttributeValueRequest;
use App\Http\Requests\Admin\UpdateAttributeValueRequest;
use App\Models\Attribute;
use App\Models\AttributeValue;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Str;

class AttributeValueController extends Controller
{
    /**
     * Store a newly created attribute value.
     */
    public function store(StoreAttributeValueRequest $request, Attribute $attribute): RedirectResponse
    {
        $data = $request->validated();
        $data['attribute_id'] = $attribute->id;
        $data['slug'] = Str::slug($data['value']);

        // Set sort_order if not provided (set to max + 1)
        if (!isset($data['sort_order']) || $data['sort_order'] === null) {
            $maxSortOrder = AttributeValue::where('attribute_id', $attribute->id)
                ->max('sort_order') ?? 0;
            $data['sort_order'] = $maxSortOrder + 1;
        }

        AttributeValue::create($data);

        return redirect()->route('admin.attributes.edit', $attribute)
            ->with('success', 'Attribute value created successfully!');
    }

    /**
     * Update the specified attribute value.
     */
    public function update(UpdateAttributeValueRequest $request, AttributeValue $value): RedirectResponse
    {
        $data = $request->validated();

        if (isset($data['value']) && $data['value'] !== $value->value) {
            $data['slug'] = Str::slug($data['value']);
        }

        $value->update($data);

        return redirect()->route('admin.attributes.edit', $value->attribute)
            ->with('success', 'Attribute value updated successfully!');
    }

    /**
     * Remove the specified attribute value.
     */
    public function destroy(AttributeValue $value): RedirectResponse
    {
        $attribute = $value->attribute;
        $value->delete();

        return redirect()->route('admin.attributes.edit', $attribute)
            ->with('success', 'Attribute value deleted successfully!');
    }
}
