/**
 * 使用者資料流程冒煙測試
 * 
 * 此測試用於 Dev/QA 環境，快速驗證使用者資料管理流程是否正常運作。
 * 測試重點：完整流程可用性，不關注性能。
 */

import { registerWithCredentials } from '../../scenarios/apis/auth.js';
import { getAndUpdateProfileFlow, userProfileInitializationFlow } from '../../scenarios/e2e/user-profile-flow.js';

export const options = {
  scenarios: {
    smoke_user_profile_flow: {
      executor: 'shared-iterations',
      vus: 1,
      iterations: 1,
      maxDuration: '30s',
      tags: { test_type: 'smoke', api: 'user', flow: 'profile' },
    },
  },
  thresholds: {
    checks: ['rate==1.0'], // 所有檢查必須通過
    http_req_duration: ['p(95)<3000'], // 95% 的請求應在 3 秒內完成（流程測試允許稍長）
  },
};

export default function () {
  const baseUrl = __ENV.BASE_URL || 'http://localhost:8888';
  const timestamp = Date.now();
  const loginId = `smoke_flow_${timestamp}@example.com`;
  const password = 'SmokeTest123!';

  // 方式 1: 使用完整初始化流程（註冊 → 取得資訊 → 更新資訊）
  console.log('測試完整使用者資料初始化流程...');
  const initFlowResult = userProfileInitializationFlow({
    baseUrl,
    loginId,
    password,
    updateData: {
      nickname: `SmokeFlow_${timestamp}`,
      preferred_language: 'zh-tw',
      currency: 'TWD',
    },
  });

  if (!initFlowResult.success) {
    console.error(`Smoke test failed: ${initFlowResult.step} - ${initFlowResult.error}`);
    return;
  }

  console.log('完整初始化流程測試通過');

  // 方式 2: 使用取得並更新流程（需要先有 Token）
  // 這裡使用上面流程獲得的 Token
  if (initFlowResult.tokens) {
    console.log('測試取得並更新流程...');
    const getUpdateFlowResult = getAndUpdateProfileFlow({
      baseUrl,
      accessToken: initFlowResult.tokens.accessToken,
      updateData: {
        nickname: `SmokeFlow_Updated_${timestamp}`,
        preferred_language: 'en-us',
      },
    });

    if (!getUpdateFlowResult.success) {
      console.error(`Smoke test failed: ${getUpdateFlowResult.step} - ${getUpdateFlowResult.error}`);
      return;
    }

    console.log('取得並更新流程測試通過');
  }

  console.log('Smoke test passed: All user profile flow operations succeeded');
}
