<?php

/**
 * Gestion de l'API des icônes
 *
 * @package WB_Onboard
 */

class WB_API_Icons
{

  /**
   * Enregistre les routes de l'API
   */
  public function register_routes()
  {
    // home_url/wp-json/wb-onboard/v1/icons
    register_rest_route('wb-onboard/v1', '/icons', array(
      'methods' => 'GET',
      'callback' => array($this, 'get_icons'),
      'permission_callback' => '__return_true',
    ));
  }

  /**
   * Récupère la liste des icônes
   *
   * @param WP_REST_Request $request
   * @return WP_REST_Response
   */
  public function get_icons($request)
  {
    $page = $request->get_param('page') ?? 1;
    $per_page = $request->get_param('per_page') ?? 10;
    $search = $request->get_param('search');
    $icon = $request->get_param('icon');
    $category = $request->get_param('category');

    // Chemin vers le dossier des icônes
    $icons_dir = WB_ONBOARD_PLUGIN_DIR_PATH . 'public/assets/icons';

    // Si on cherche une icône spécifique
    if ($icon) {
      $icon_path = $icons_dir . '/' . $icon . '.svg';
      if (file_exists($icon_path)) {
        return new WP_REST_Response([
          'icon' => [
            'value' => $icon,
            'path' => WB_ONBOARD_PLUGIN_DIR_URL . 'public/assets/icons/' . $icon . '.svg'
          ],
          'total' => 1,
          'pages' => 1
        ]);
      }
    }

    // Récupère tous les fichiers SVG
    $files = glob($icons_dir . '/*.svg');

    // Filtre par catégorie si spécifiée
    if ($category) {
      $files = array_filter($files, function ($file) use ($category) {
        $filename = basename($file, '.svg');
        return strpos($filename, $category . '-') === 0;
      });
      $files = array_values($files); // Réindexe le tableau
    }

    // Filtre par recherche si nécessaire
    if (!empty($search)) {
      $files = array_filter($files, function ($file) use ($search) {
        return stripos(basename($file, '.svg'), $search) !== false;
      });
      $files = array_values($files); // Réindexe le tableau
    }

    // Calcul du total
    $total = count($files);

    // Pagination
    $offset = ($page - 1) * $per_page;
    $files = array_slice($files, $offset, $per_page);

    // Formatage des résultats
    $icons = array_map(function ($file) {
      $filename = basename($file, '.svg');
      return array(
        'value' => $filename,
        'path' => WB_ONBOARD_PLUGIN_DIR_URL . 'public/assets/icons/' . basename($file)
      );
    }, $files);

    return new WP_REST_Response(array(
      'icons' => $icons,
      'total' => $total,
      'pages' => ceil($total / $per_page)
    ));
  }
}
