import { test, expect } from '../fixtures/auth.fixture';
import { testAccounts, loginPaths, selectors } from '../utils/test-data';

/**
 * 多租户登录测试
 * 测试不同租户端的登录功能
 */

test.describe('多租户登录测试', () => {

  test.describe('平台超管端登录', () => {

    test('TC-LOGIN-001: 平台超管登录成功', async ({ page, loginViaUI }) => {
      // 执行登录
      await loginViaUI('platform');

      // 验证 Token 已存储
      const token = await page.evaluate(() => localStorage.getItem('token'));
      expect(token).toBeTruthy();

      // 验证租户信息
      const tenantCode = await page.evaluate(() => localStorage.getItem('tenantCode'));
      expect(tenantCode).toBe('platform');

      // 验证当前 URL 包含 /platform/
      await expect(page).toHaveURL(/\/platform\/.*/);

      console.log('✓ TC-LOGIN-001 通过：平台超管登录成功');
    });

    test('TC-LOGIN-004: 登录失败 - 租户不存在', async ({ request }) => {
const API_BASE = 'http://localhost:8580';

      const response = await request.post(`${API_BASE}/api/auth/login`, {
        data: {
          username: 'admin',
          password: 'admin123',
          tenantCode: 'nonexistent',
        },
      });

      const data = await response.json();

      // 验证返回错误
      expect(data.code).not.toBe(200);
      expect(data.message).toContain('租户不存在');

      console.log('✓ TC-LOGIN-004 通过：租户不存在时返回正确错误信息');
    });
  });

  test.describe('租户端登录', () => {

    test('TC-LOGIN-002: 租户端登录成功', async ({ page, loginViaUI }) => {
      // 执行登录
      await loginViaUI('gdlib');

      // 验证 Token 已存储
      const token = await page.evaluate(() => localStorage.getItem('token'));
      expect(token).toBeTruthy();

      // 验证租户信息
      const tenantCode = await page.evaluate(() => localStorage.getItem('tenantCode'));
      expect(tenantCode).toBe('gdlib');

      // 验证当前 URL 包含 /gdlib/
      await expect(page).toHaveURL(/\/gdlib\/.*/);

      console.log('✓ TC-LOGIN-002 通过：租户端登录成功');
    });
  });

  test.describe('评委端登录', () => {

    test('TC-LOGIN-003: 评委端登录成功', async ({ page, loginViaUI }) => {
      // 执行登录
      await loginViaUI('judge');

      // 验证 Token 已存储
      const token = await page.evaluate(() => localStorage.getItem('token'));
      expect(token).toBeTruthy();

      // 验证租户信息
      const tenantCode = await page.evaluate(() => localStorage.getItem('tenantCode'));
      expect(tenantCode).toBe('judge');

      // 验证当前 URL 包含 /judge/
      await expect(page).toHaveURL(/\/judge\/.*/);

      console.log('✓ TC-LOGIN-003 通过：评委端登录成功');
    });
  });

  test.describe('登录失败场景', () => {

    test('TC-LOGIN-005: 登录失败 - 用户名错误', async ({ request }) => {
const API_BASE = 'http://localhost:8580';

      const response = await request.post(`${API_BASE}/api/auth/login`, {
        data: {
          username: 'notexist',
          password: 'admin123',
          tenantCode: 'platform',
        },
      });

      const data = await response.json();

      // 验证返回错误
      expect(data.code).not.toBe(200);
      expect(data.message).toContain('用户名或密码错误');

      console.log('✓ TC-LOGIN-005 通过：用户名错误时返回正确错误信息');
    });

    test('TC-LOGIN-006: 登录失败 - 密码错误', async ({ request }) => {
const API_BASE = 'http://localhost:8580';

      const response = await request.post(`${API_BASE}/api/auth/login`, {
        data: {
          username: 'admin',
          password: 'wrongpassword',
          tenantCode: 'platform',
        },
      });

      const data = await response.json();

      // 验证返回错误
      expect(data.code).not.toBe(200);
      expect(data.message).toContain('用户名或密码错误');

      console.log('✓ TC-LOGIN-006 通过：密码错误时返回正确错误信息');
    });

    test('TC-LOGIN-007: 登录失败 - 租户不匹配', async ({ request }) => {
const API_BASE = 'http://localhost:8580';

      // 使用平台租户的账号尝试登录到 gdlib 租户
      const response = await request.post(`${API_BASE}/api/auth/login`, {
        data: {
          username: 'admin',
          password: 'admin123',
          tenantCode: 'gdlib',
        },
      });

      // 注意：这里取决于后端实现，可能返回"用户不属于该租户"或其他错误
      const data = await response.json();
      console.log('租户不匹配响应:', data);

      console.log('✓ TC-LOGIN-007 通过：租户不匹配场景测试完成');
    });

    test('TC-LOGIN-008: 登录失败 - 账号被禁用', async ({ request }) => {
      // 这个测试需要数据库中有被禁用的账号
      // 暂时作为占位测试
      console.log('✓ TC-LOGIN-008 占位：账号被禁用场景（需要测试数据支持）');
    });
  });
});
