const User = require('../models/User'); // Импортируем нашу модель пользователя
// const bcrypt = require('bcryptjs'); // bcryptjs уже используется внутри модели User.js, здесь он напрямую не нужен для регистрации
// const jwt = require('jsonwebtoken'); // Понадобится позже для генерации токена

// @desc    Регистрация нового пользователя
// @route   POST /api/auth/register
// @access  Public
const registerUser = async (req, res, next) => {
  try {
    const { name, email, password, dateOfBirth, gender } = req.body; // Получаем данные из тела запроса

    // 1. Простая валидация на сервере (дополнительно к валидации Mongoose)
    if (!name || !email || !password) {
      res.status(400); // Bad Request
      // Используем Error, чтобы передать его в наш будущий обработчик ошибок
      throw new Error('Пожалуйста, заполните все обязательные поля: имя, email и пароль.');
    }

    // 2. Проверка, не существует ли уже пользователь с таким email
    const userExists = await User.findOne({ email: email.toLowerCase() });

    if (userExists) {
      res.status(400); // Bad Request
      throw new Error('Пользователь с таким email уже существует.');
    }

    // 3. Создание нового пользователя
    // Пароль будет автоматически хеширован благодаря middleware в модели User.js
    const user = await User.create({
      name,
      email: email.toLowerCase(),
      password, // Передаем пароль как есть, модель позаботится о хешировании
      dateOfBirth, // Эти поля пока опциональны, если их нет в req.body, они будут undefined
      gender,      // и не запишутся, если в схеме нет default значения и они не required
    });

    if (user) {
      // Если пользователь успешно создан
      // TODO: Сгенерировать JWT токен и отправить его клиенту

      res.status(201).json({ // 201 Created
        _id: user._id,
        name: user.name,
        email: user.email,
        // token: generateToken(user._id) // Раскомментируем, когда будет функция generateToken
        message: 'Пользователь успешно зарегистрирован!' // Временное сообщение
      });
    } else {
      res.status(400); // Bad Request
      throw new Error('Неверные данные пользователя. Не удалось создать пользователя.');
    }
  } catch (error) {
    // Логируем ошибку на сервере для отладки
    console.error('Ошибка при регистрации:', error.message); 
    // Если статус не был установлен ранее (например, при ошибке валидации Mongoose)
    if (!res.statusCode || res.statusCode < 400) {
        res.status(400); // По умолчанию Bad Request для ошибок регистрации
    }
    // Передаем ошибку дальше, чтобы ее мог обработать централизованный обработчик ошибок (если он есть)
    // или Express обработает ее по умолчанию.
    // Мы пока будем просто отправлять сообщение ошибки.
    res.json({ message: error.message, stack: process.env.NODE_ENV === 'production' ? null : error.stack });
    // next(error); // Это для централизованного обработчика ошибок, который мы можем добавить позже
  }
};


// TODO: Функция для входа пользователя (loginUser)
// const loginUser = async (req, res, next) => { ... };

// TODO: Функция для получения информации о текущем пользователе (getMe)
// const getMe = async (req, res, next) => { ... };


// Экспортируем функции контроллера
module.exports = {
  registerUser,
  // loginUser, // Раскомментируем позже
  // getMe,       // Раскомментируем позже
};