@extends('layouts.admin')

@section('title', 'Manual Stock Adjustment')

@section('content')
<div class="admin-page-header">
    <h1>Manual Stock Adjustment</h1>
    <a href="{{ route('admin.stock-adjustments.index') }}" class="admin-btn-primary" style="background: #6c757d;">
        <i class="bi bi-arrow-left"></i> Adjustment History
    </a>
</div>

<div class="admin-card">
    <div class="card-body">
        <h3 class="mb-4" style="color: var(--admin-primary);">
            <i class="bi bi-pencil-square"></i> Adjust stock (Admin only)
        </h3>
@php
    $singleProducts = \App\Models\Product::query()
        ->whereNull('parent_id')
        ->where('product_type', 'single')
        ->orderBy('name')
        ->get();

    $variantParents = \App\Models\Product::query()
        ->whereNull('parent_id')
        ->where('product_type', 'variant')
        ->with(['variants' => function ($q) {
            $q->orderBy('name');
        }])
        ->orderBy('name')
        ->get();
@endphp
        <form action="{{ route('admin.stock-adjustments.manual.store') }}" method="POST">
            @csrf
            <input type="hidden" name="product_id" id="product_id_hidden" value="{{ old('product_id') }}">
            <input type="hidden" name="variant_id" id="variant_id_hidden" value="{{ old('variant_id') }}">
            <div class="row">
                <div class="col-md-6 mb-3">
                    <label class="admin-form-label">Product *</label>
                    <select name="product_selector" id="product_selector" class="form-select admin-form-control @error('product_id') is-invalid @enderror" required>
                        <option value="">Select product</option>
                        @foreach($singleProducts as $p)
                            <option
                                value="single:{{ $p->id }}"
                                data-type="single"
                                data-product-id="{{ $p->id }}"
                                {{ (old('product_id') == $p->id && !old('variant_id')) ? 'selected' : '' }}
                            >{{ $p->name }} - {{ $p->barcode ?? '-' }} - {{ $p->tags ?? '-' }} — Stock: {{ $p->current_stock }}</option>
                        @endforeach
                        @foreach($variantParents as $parent)
                            <option
                                value="parent:{{ $parent->id }}"
                                data-type="variant-parent"
                                data-parent-id="{{ $parent->id }}"
                                {{ (old('product_id') == $parent->id && !old('variant_id')) ? 'selected' : '' }}
                            >[Variant] {{ $parent->name }} - {{ $parent->barcode ?? '-' }} - {{ $parent->tags ?? '-' }}</option>
                            @foreach($parent->variants as $v)
                                <option
                                    value="variant:{{ $v->id }}"
                                    data-type="variant-child"
                                    data-parent-id="{{ $parent->id }}"
                                    data-variant-id="{{ $v->id }}"
                                    {{ old('variant_id') == $v->id ? 'selected' : '' }}
                                >— {{ $parent->name }} / {{ $v->variation_name ?? $v->sku ?? $v->name }} - {{ $v->barcode ?? '-' }} - {{ $v->tags ?? '-' }} — Stock: {{ $v->current_stock }}</option>
                            @endforeach
                        @endforeach
                    </select>
                    @error('product_id')
                        <div class="invalid-feedback">{{ $message }}</div>
                    @enderror
                </div>
                <div class="col-md-6 mb-3" id="variant_wrap" style="display: none;">
                    <label class="admin-form-label">Variant *</label>
                    <select id="variant_picker" class="form-select admin-form-control @error('variant_id') is-invalid @enderror">
                        <option value="">— Select variant —</option>
                    </select>
                    @error('variant_id')
                        <div class="invalid-feedback">{{ $message }}</div>
                    @enderror
                </div>
                <div class="col-md-6 mb-3">
                    <label class="admin-form-label">Adjustment type *</label>
                    <select name="adjustment_type" class="form-select admin-form-control @error('adjustment_type') is-invalid @enderror" required>
                        <option value="addition" {{ old('adjustment_type') === 'addition' ? 'selected' : '' }}>Addition</option>
                        <option value="subtraction" {{ old('adjustment_type') === 'subtraction' ? 'selected' : '' }}>Subtraction</option>
                    </select>
                    @error('adjustment_type')
                        <div class="invalid-feedback">{{ $message }}</div>
                    @enderror
                </div>
                <div class="col-md-6 mb-3">
                    <label class="admin-form-label">Quantity *</label>
                    <input type="number" step="0.01" min="0.01" name="quantity" class="admin-form-control form-control @error('quantity') is-invalid @enderror" value="{{ old('quantity') }}" required>
                    @error('quantity')
                        <div class="invalid-feedback">{{ $message }}</div>
                    @enderror
                </div>
                <div class="col-md-6 mb-3">
                    <label class="admin-form-label">Reason *</label>
                    <select name="reason" class="form-select admin-form-control @error('reason') is-invalid @enderror" required>
                        @foreach($reasonOptions as $value => $label)
                            <option value="{{ $value }}" {{ old('reason') === $value ? 'selected' : '' }}>{{ $label }}</option>
                        @endforeach
                    </select>
                    @error('reason')
                        <div class="invalid-feedback">{{ $message }}</div>
                    @enderror
                </div>
                <div class="col-12 mb-3 col-md-6">
                    <label class="admin-form-label">Remarks * (min 10 characters)</label>
                    <textarea name="remarks" class="admin-form-control form-control @error('remarks') is-invalid @enderror" rows="3" required minlength="10" placeholder="Describe the reason for this adjustment">{{ old('remarks') }}</textarea>
                    @error('remarks')
                        <div class="invalid-feedback">{{ $message }}</div>
                    @enderror
                </div>
                <div class="col-12">
                    <button type="submit" class="admin-btn-primary">
                        <i class="bi bi-check-circle"></i> Apply Adjustment
                    </button>
                </div>
            </div>
        </form>
    </div>
</div>

@push('scripts')
<script type="application/json" id="variant-data-json">@json($variantParents->mapWithKeys(function ($p) {
    return [$p->id => $p->variants->map(function ($v) {
        return ['id' => $v->id, 'name' => $v->variation_name ?? $v->sku ?? $v->name, 'stock' => $v->current_stock];
    })->values()->all()];
})->toArray())</script>
<script>
var variantData = JSON.parse(document.getElementById('variant-data-json').textContent || '{}');

function setHiddenValues(productId, variantId) {
    document.getElementById('product_id_hidden').value = productId || '';
    document.getElementById('variant_id_hidden').value = variantId || '';
}

function showVariantPicker(parentId, selectedVariantId) {
    var wrap = document.getElementById('variant_wrap');
    var sel = document.getElementById('variant_picker');
    sel.innerHTML = '<option value="">— Select variant —</option>';
    if (parentId && variantData[parentId]) {
        variantData[parentId].forEach(function(v) {
                var o = document.createElement('option');
                o.value = v.id;
                o.textContent = v.name + ' — Stock: ' + v.stock;
                if (selectedVariantId && String(selectedVariantId) === String(v.id)) {
                    o.selected = true;
                }
                sel.appendChild(o);
        });
        wrap.style.display = 'block';
        sel.setAttribute('required', 'required');
    } else {
        wrap.style.display = 'none';
        sel.value = '';
        sel.removeAttribute('required');
    }
}

document.getElementById('product_selector').addEventListener('change', function() {
    var opt = this.options[this.selectedIndex];
    var type = opt ? opt.getAttribute('data-type') : null;

    if (!opt || !type) {
        setHiddenValues('', '');
        showVariantPicker(null, null);
        return;
    }

    if (type === 'single') {
        setHiddenValues(opt.getAttribute('data-product-id'), '');
        showVariantPicker(null, null);
        return;
    }

    if (type === 'variant-parent') {
        var parentId = opt.getAttribute('data-parent-id');
        setHiddenValues(parentId, '');
        showVariantPicker(parentId, null);
        return;
    }

    if (type === 'variant-child') {
        var parentId2 = opt.getAttribute('data-parent-id');
        var variantId2 = opt.getAttribute('data-variant-id');
        setHiddenValues(parentId2, variantId2);
        showVariantPicker(null, null);
        return;
    }
});

document.getElementById('variant_picker').addEventListener('change', function () {
    var currentProductId = document.getElementById('product_id_hidden').value;
    var variantId = this.value;
    setHiddenValues(currentProductId, variantId);
});

if (document.getElementById('product_selector').value) {
    document.getElementById('product_selector').dispatchEvent(new Event('change'));
}
</script>
@endpush
@endsection
