@charset "UTF-8";
/*
    Template: swell
    Theme Name: SWELL CHILD
    Theme URI: https://swell-theme.com/
    Description: SWELLの子テーマ
    Version: 1.0.0
    Author: LOOS WEB STUDIO
    Author URI: https://loos-web-studio.com/

    License: GNU General Public License
    License URI: http://www.gnu.org/licenses/gpl.html
*/
<?php
// Glowly AI REST endpoints
add_action('rest_api_init', function () {

  // 受け口：フロント→WP。必要に応じてVMへ転送。
  register_rest_route('glowly/v1', '/webhook', array(
    'methods'  => WP_REST_Server::CREATABLE, // POST
    'permission_callback' => '__return_true',
    'callback' => function (WP_REST_Request $req) {

    set_transient($key, $count + 1, 60 * 60 * 24);
      // JSON取得
      $data = $req->get_json_params();
      if (empty($data)) {
        $tmp = json_decode($req->get_body(), true);
        $data = is_array($tmp) ? $tmp : array();
      }

      // VM→WP通知（recommendのみ）：保存して終了（転送しない）
      if (isset($data['recommend']) && is_array($data['recommend'])) {
        set_transient('glowly_latest_recommend', $data['recommend'], HOUR_IN_SECONDS);
        return new WP_REST_Response(array('ok'=>true, 'mode'=>'save_only'), 200);
      }

      // フロント→WP（imageあり）：VMへフォワード
      if (!empty($data['image'])) {
        $vm_url = 'http://34.46.32.239:8080/webhook';
		$image_base64 = isset($data['image']) ? $data['image'] : '';  // 念のため
		$answers = isset($data['answers']) ? $data['answers'] : array();

		$res = wp_remote_post($vm_url, array(
		  'headers' => array(
			'Content-Type' => 'application/json',
		  ),
		  'body' => wp_json_encode(array(
			'image'   => $image_base64,
			'answers' => $answers,
		  )),
		));


        if (is_wp_error($res)) {
          error_log('[glowly] VM ERR: '.$res->get_error_message());
          return new WP_Error('vm_error', 'VMへの転送失敗', array('status'=>502));
        }

        $code    = wp_remote_retrieve_response_code($res);
        $body    = wp_remote_retrieve_body($res);
        $vm_data = json_decode($body, true);
        if (!is_array($vm_data)) { $vm_data = array('raw'=>$body); }

        if (!empty($vm_data['recommend']) && is_array($vm_data['recommend'])) {
          set_transient('glowly_latest_recommend', $vm_data['recommend'], HOUR_IN_SECONDS);
        }

        return new WP_REST_Response(array('ok'=>true, 'mode'=>'forward', 'vm_status'=>$code), 200);
      }

      // 不正リクエスト
      return new WP_REST_Response(array('ok'=>false, 'error'=>'no image or recommend'), 400);
    },
  ));

  // 保存済み推薦を返す
  register_rest_route('glowly/v1', '/last', array(
    'methods'  => WP_REST_Server::READABLE, // GET
    'permission_callback' => '__return_true',
    'callback' => function () {
      $rec = get_transient('glowly_latest_recommend');
      return new WP_REST_Response(array('recommend'=>$rec), 200);
    },
  ));

});

