const test = require('node:test');
const assert = require('node:assert/strict');

const {
  getActivationStrategy,
  isRecoverableStep9AuthFailure,
} = require('../content/activation-utils.js');

test('getActivationStrategy prefers requestSubmit for submit buttons inside forms', () => {
  assert.deepEqual(
    getActivationStrategy({
      tagName: 'button',
      type: 'submit',
      hasForm: true,
      pathname: '/email-verification',
    }),
    { method: 'requestSubmit' }
  );
});

test('getActivationStrategy uses native click for non-submit actions', () => {
  assert.deepEqual(
    getActivationStrategy({
      tagName: 'button',
      type: 'button',
      hasForm: true,
    }),
    { method: 'click' }
  );

  assert.deepEqual(
    getActivationStrategy({
      tagName: 'a',
      type: '',
      hasForm: false,
    }),
    { method: 'click' }
  );
});

test('getActivationStrategy only uses requestSubmit on email verification routes', () => {
  assert.deepEqual(
    getActivationStrategy({
      tagName: 'button',
      type: 'submit',
      hasForm: true,
      pathname: '/u/signup/details',
    }),
    { method: 'click' }
  );

  assert.deepEqual(
    getActivationStrategy({
      tagName: 'button',
      type: 'submit',
      hasForm: true,
      pathname: '/email-verification',
    }),
    { method: 'requestSubmit' }
  );
});

test('isRecoverableStep9AuthFailure matches timeout and CPA auth failure statuses', () => {
  assert.equal(
    isRecoverableStep9AuthFailure('认证失败: Timeout waiting for OAuth callback'),
    true
  );

  assert.equal(
    isRecoverableStep9AuthFailure('认证失败: Request failed with status code 502'),
    true
  );

  assert.equal(
    isRecoverableStep9AuthFailure('认证失败: timeout of 30000ms exceeded'),
    true
  );

  assert.equal(
    isRecoverableStep9AuthFailure('回调 URL 提交失败: oauth flow is not pending'),
    true
  );

  assert.equal(
    isRecoverableStep9AuthFailure('提交回调失败：请更新CLI Proxy API或检查连接'),
    true
  );

  assert.equal(
    isRecoverableStep9AuthFailure('认证失败：Bad Request'),
    true
  );

  assert.equal(
    isRecoverableStep9AuthFailure('认证成功！'),
    false
  );

  assert.equal(
    isRecoverableStep9AuthFailure('等待中'),
    false
  );
});
