<?php

namespace Database\Seeders;

use App\Models\Items\Item;
use App\Models\Tenants\Stock;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

/**
 * 재고 초기화 시더
 *
 * - 모든 자재 품목(RM, SM, CS)에 대해 Stock 레코드 생성/업데이트
 * - 안전재고: 10개
 * - 실제 재고: 0~100 랜덤
 */
class StockInitSeeder extends Seeder
{
    public function run(): void
    {
        $tenantId = 287; // 실제 사용 테넌트

        // 재고 관리 대상 품목 조회 (RM, SM, CS, PT, SF) - FG(완제품) 제외
        $items = Item::where('tenant_id', $tenantId)
            ->whereIn('item_type', ['RM', 'SM', 'CS', 'PT', 'SF'])
            ->get();

        $this->command->info("총 {$items->count()}개 품목에 대해 Stock 생성/업데이트 시작...");

        $created = 0;
        $updated = 0;

        DB::transaction(function () use ($items, $tenantId, &$created, &$updated) {
            foreach ($items as $item) {
                $stockQty = rand(0, 100);
                $safetyStock = 10;

                // 재고 상태 계산
                $status = 'normal';
                if ($stockQty <= 0) {
                    $status = 'out';
                } elseif ($stockQty < $safetyStock) {
                    $status = 'low';
                }

                $stock = Stock::where('tenant_id', $tenantId)
                    ->where('item_id', $item->id)
                    ->first();

                if ($stock) {
                    // 기존 Stock 업데이트
                    $stock->update([
                        'stock_qty' => $stockQty,
                        'safety_stock' => $safetyStock,
                        'available_qty' => $stockQty,
                        'status' => $status,
                        'updated_by' => 1,
                    ]);
                    $updated++;
                } else {
                    // 새 Stock 생성
                    Stock::create([
                        'tenant_id' => $tenantId,
                        'item_id' => $item->id,
                        'item_code' => $item->code,
                        'item_name' => $item->name,
                        'item_type' => $item->item_type,
                        'specification' => $item->specification ?? null,
                        'unit' => $item->unit ?? 'EA',
                        'stock_qty' => $stockQty,
                        'safety_stock' => $safetyStock,
                        'reserved_qty' => 0,
                        'available_qty' => $stockQty,
                        'lot_count' => 0,
                        'location' => null,
                        'status' => $status,
                        'created_by' => 1,
                        'updated_by' => 1,
                    ]);
                    $created++;
                }
            }
        });

        $this->command->info("완료! 생성: {$created}개, 업데이트: {$updated}개");
    }
}
