const mongoose = require('mongoose');

// Типы вопросов
const QUESTION_TYPES = {
  SINGLE_CHOICE: 'single_choice', // Один вариант
  MULTIPLE_CHOICE: 'multiple_choice', // Несколько вариантов
  TEXT: 'text', // Текстовый ответ
  RATING: 'rating', // Оценка по шкале
  TAG_CLOUD: 'tag_cloud' // Облако тегов
};

// Типы отображения
const DISPLAY_TYPES = {
  DEFAULT: 'default',
  TAG_CLOUD: 'tag_cloud',
  VOTING: 'voting',
  POLL: 'poll'
};

// Схема варианта ответа
const optionSchema = new mongoose.Schema({
  text: { type: String, required: true },
  count: { type: Number, default: 0 } // счетчик голосов
});

// Схема вопроса
const questionSchema = new mongoose.Schema({
  text: { type: String, required: true },
  type: { 
    type: String, 
    enum: Object.values(QUESTION_TYPES),
    required: true 
  },
  options: [optionSchema],
  required: { type: Boolean, default: false }
});

// Схема опроса
const questionnaireSchema = new mongoose.Schema({
  title: { type: String, required: true },
  description: { type: String },
  questions: [questionSchema],
  displayType: { 
    type: String, 
    enum: Object.values(DISPLAY_TYPES),
    default: DISPLAY_TYPES.DEFAULT 
  },
  createdAt: { type: Date, default: Date.now },
  updatedAt: { type: Date, default: Date.now },
  adminLink: { type: String, required: true }, // ссылка для редактирования
  publicLink: { type: String, required: true } // ссылка для голосования
});

const Questionnaire = mongoose.model('Questionnaire', questionnaireSchema);

module.exports = {
  Questionnaire,
  QUESTION_TYPES,
  DISPLAY_TYPES
};