import { QuestionModel } from '../api/models/question';
import { db } from '../api/database';

const questions = [
  // 单选题 (Single Choice)
  {
    content: 'React 是由哪个公司维护的开源项目？',
    type: 'single',
    options: ['Google', 'Facebook (Meta)', 'Apple', 'Microsoft'],
    answer: 'Facebook (Meta)',
    score: 5
  },
  {
    content: '在 React 中，用于管理组件内部状态的 Hook 是？',
    type: 'single',
    options: ['useEffect', 'useContext', 'useState', 'useReducer'],
    answer: 'useState',
    score: 5
  },
  {
    content: 'TypeScript 是哪种语言的超集？',
    type: 'single',
    options: ['Java', 'C#', 'JavaScript', 'Python'],
    answer: 'JavaScript',
    score: 5
  },
  {
    content: 'HTTP 协议中，表示请求成功的状态码是？',
    type: 'single',
    options: ['200', '404', '500', '302'],
    answer: '200',
    score: 5
  },
  {
    content: 'CSS 中，用于设置元素背景颜色的属性是？',
    type: 'single',
    options: ['color', 'background-color', 'border-color', 'font-color'],
    answer: 'background-color',
    score: 5
  },
  
  // 多选题 (Multiple Choice)
  {
    content: '以下哪些是常见的前端构建工具？',
    type: 'multiple',
    options: ['Webpack', 'Vite', 'Maven', 'Rollup'],
    answer: ['Webpack', 'Vite', 'Rollup'],
    score: 10
  },
  {
    content: '以下哪些属于 HTML5 的新特性？',
    type: 'multiple',
    options: ['Canvas', 'LocalStorage', 'Flexbox', 'Semantic Tags (语义化标签)'],
    answer: ['Canvas', 'LocalStorage', 'Semantic Tags (语义化标签)'],
    score: 10
  },
  {
    content: 'React 的生命周期方法（类组件）包括哪些？',
    type: 'multiple',
    options: ['componentDidMount', 'componentDidUpdate', 'componentWillUnmount', 'useEffect'],
    answer: ['componentDidMount', 'componentDidUpdate', 'componentWillUnmount'],
    score: 10
  },
  {
    content: '以下哪些是 JavaScript 的基本数据类型？',
    type: 'multiple',
    options: ['String', 'Number', 'Boolean', 'Object'],
    answer: ['String', 'Number', 'Boolean'],
    score: 10
  },
  
  // 判断题 (Judgment)
  {
    content: 'HTML 是一种编程语言。',
    type: 'judgment',
    answer: '错误',
    score: 5
  },
  {
    content: '在 JavaScript 中，null === undefined 的结果是 true。',
    type: 'judgment',
    answer: '错误',
    score: 5
  },
  {
    content: 'React 组件必须返回一个根元素。',
    type: 'judgment',
    answer: '正确',
    score: 5
  },
  {
    content: 'localStorage 存储的数据没有过期时间。',
    type: 'judgment',
    answer: '正确',
    score: 5
  },
  
  // 文字题 (Text)
  {
    content: '请简述什么是闭包（Closure）。',
    type: 'text',
    answer: '闭包是指有权访问另一个函数作用域中的变量的函数。',
    score: 15
  },
  {
    content: '请解释 GET 和 POST 请求的主要区别。',
    type: 'text',
    answer: 'GET主要用于获取数据，参数在URL中；POST主要用于提交数据，参数在请求体中。',
    score: 15
  }
];

async function seed() {
  console.log('开始生成测试题库...');
  try {
    // @ts-ignore
    const result = await QuestionModel.createMany(questions);
    console.log(`成功生成 ${result.success} 道题目`);
    if (result.errors.length > 0) {
      console.error('部分题目生成失败:', result.errors);
    }
  } catch (error) {
    console.error('生成题库失败:', error);
  }
  
  // 等待一小会儿确保数据库操作完成
  setTimeout(() => {
    process.exit(0);
  }, 1000);
}

seed();
