<?php

namespace App\Http\Controllers\Api\V1\Admin\Draw;

use App\Lottery\ErrorCode;
use App\Support\ApiMessage;
use App\Support\ApiResponse;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Services\Draw\DrawDestroyService;

final class AdminDrawBatchDestroyController extends Controller
{
    public function __construct(
        private readonly DrawDestroyService $service,
    ) {}

    public function __invoke(Request $request): JsonResponse
    {
        $drawIds = $request->input('draw_ids', []);
        
        if (!is_array($drawIds) || empty($drawIds)) {
            return ApiMessage::errorResponse($request, 'invalid_params', ErrorCode::ClientHttpError->value, [], 400);
        }

        $results = [
            'success' => [],
            'failed' => [],
        ];

        foreach ($drawIds as $drawId) {
            try {
                $draw = \App\Models\Draw::findOrFail($drawId);
                $this->service->destroy($draw);
                $results['success'][] = $drawId;
            } catch (\RuntimeException $e) {
                $results['failed'][] = [
                    'id' => $drawId,
                    'reason' => ApiMessage::reason($request, $e->getMessage()),
                    'reason_key' => $e->getMessage(),
                ];
            } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) {
                $results['failed'][] = [
                    'id' => $drawId,
                    'reason' => ApiMessage::get($request, 'draw_not_found'),
                    'reason_key' => 'draw_not_found',
                ];
            }
        }

        return ApiResponse::success($results);
    }
}
