<?php

namespace App\Http\Controllers\Api\Jumpseller;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Http;
use App\Models\Category;
use Illuminate\Http\Request;
use Illuminate\Support\Str;

class CategoryController extends Controller
{
    /**
     * Consulta las categorías desde Jumpseller y las guarda/actualiza en la base de datos.
     */
   public function sync()
{
    try {
        // 1️⃣ Llamada a Jumpseller /products.json
        $response = Http::acceptJson()
            ->timeout(20)
            ->retry(2, 500)
            ->withHeaders(['User-Agent' => 'Radar-API/1.0'])
            ->get('https://api.jumpseller.com/v1/products.json', [
                'login'     => config('services.jumpseller.login'),
                'authtoken' => config('services.jumpseller.auth_token'),
                'limit'     => 100,
            ]);

        if (!$response->successful()) {
            return response()->json([
                'error'  => 'Jumpseller',
                'status' => $response->status(),
                'body'   => $response->json(),
            ], $response->status());
        }

        $products = $response->json();

        // 2️⃣ Extraer categorías únicas correctamente
        $uniqueCategories = collect();

        foreach ($products as $item) {
            $product = $item['product'] ?? null;
            if ($product && isset($product['categories']) && is_array($product['categories'])) {
                foreach ($product['categories'] as $cat) {
                    // A veces Jumpseller devuelve string, a veces array
                    if (is_string($cat)) {
                        $uniqueCategories->push($cat);
                    } elseif (is_array($cat) && isset($cat['name'])) {
                        $uniqueCategories->push($cat['name']);
                    }
                }
            }
        }

        // 3️⃣ Eliminar duplicados y limpiar texto
        $uniqueCategories = $uniqueCategories
            ->unique()
            ->filter(fn($cat) => !empty(trim($cat)))
            ->values();

        // 4️⃣ Guardar o actualizar categorías
        foreach ($uniqueCategories as $catName) {
            \App\Models\Category::updateOrCreate(
                ['code' => Str::slug($catName)], // usa slug como código
                [
                    'name' => $catName,
                    'parent_id' => null,
                    'campaign_id' => 'GoPoints',
                ]
            );
        }

        return response()->json([
            'message' => 'Categorías sincronizadas desde productos correctamente',
            'total'   => $uniqueCategories->count(),
            'categories' => $uniqueCategories->values(),
        ]);

    } catch (\Throwable $e) {
        return response()->json([
            'error'   => 'Error de red o procesamiento',
            'status'  => 500,
            'message' => $e->getMessage(),
        ], 500);
    }
}


    /**
     * Muestra las categorías guardadas (para verificar).
     */
    public function index()
    {
        $categories = Category::with('children')->get();
        return response()->json($categories);
    }
}
