const mongoose = require('../../../utils/mongoose');
const Request = require('../models/Request');
const Company = require('../models/Company');
const User = require('../models/User');

async function seedRequests() {
  try {
    // Подключение к MongoDB происходит через server/utils/mongoose.ts
    if (mongoose.connection.readyState !== 1) {
      console.log('⏳ Waiting for MongoDB connection...');
      await new Promise((resolve) => {
        mongoose.connection.once('connected', resolve);
      });
    }
    console.log('✅ Connected to MongoDB');

    // Получаем все компании
    const companies = await Company.find().limit(10).exec();
    if (companies.length < 2) {
      console.error('❌ Need at least 2 companies in database');
      process.exit(1);
    }

    // Получаем тестового пользователя
    const testUser = await User.findOne({ email: 'admin@test-company.ru' }).exec();
    if (!testUser) {
      console.error('❌ Test user not found');
      process.exit(1);
    }

    const testCompanyId = testUser.companyId.toString();
    console.log('📋 Test company ID:', testCompanyId);
    console.log('📋 Found', companies.length, 'companies');

    // Удаляем старые запросы
    await Request.deleteMany({});
    console.log('🗑️  Cleared old requests');

    const requests = [];
    const now = new Date();

    // Создаем отправленные запросы (от тестовой компании)
    for (let i = 0; i < 5; i++) {
      const recipientCompany = companies[i % companies.length];
      if (recipientCompany._id.toString() === testCompanyId) {
        continue;
      }

      const createdAt = new Date(now.getTime() - i * 24 * 60 * 60 * 1000); // За последние 5 дней

      requests.push({
        senderCompanyId: testCompanyId,
        recipientCompanyId: recipientCompany._id.toString(),
        subject: `Запрос на поставку ${i + 1}`,
        text: `Здравствуйте! Интересует поставка товаров/услуг. Запрос ${i + 1}. Прошу предоставить коммерческое предложение.`,
        files: [],
        responseFiles: [],
        status: i % 3 === 0 ? 'accepted' : i % 3 === 1 ? 'rejected' : 'pending',
        response: i % 3 === 0 
          ? 'Благодарим за запрос! Готовы предоставить услуги. Отправили КП на почту.' 
          : i % 3 === 1 
            ? 'К сожалению, в данный момент не можем предоставить эти услуги.'
            : null,
        respondedAt: i % 3 !== 2 ? new Date(createdAt.getTime() + 2 * 60 * 60 * 1000) : null,
        createdAt,
        updatedAt: i % 3 !== 2 ? new Date(createdAt.getTime() + 2 * 60 * 60 * 1000) : createdAt,
      });
    }

    // Создаем полученные запросы (к тестовой компании)
    for (let i = 0; i < 3; i++) {
      const senderCompany = companies[(i + 2) % companies.length];
      if (senderCompany._id.toString() === testCompanyId) {
        continue;
      }

      const createdAt = new Date(now.getTime() - (i + 1) * 12 * 60 * 60 * 1000); // За последние 1.5 дня

      requests.push({
        senderCompanyId: senderCompany._id.toString(),
        recipientCompanyId: testCompanyId,
        subject: `Предложение о сотрудничестве ${i + 1}`,
        text: `Добрый день! Предлагаем сотрудничество. Запрос ${i + 1}. Заинтересованы в вашей продукции.`,
        files: [],
        responseFiles: [],
        status: 'pending',
        response: null,
        respondedAt: null,
        createdAt,
        updatedAt: createdAt,
      });
    }

    // Сохраняем все запросы
    const savedRequests = await Request.insertMany(requests);
    console.log('✅ Created', savedRequests.length, 'test requests');

    // Статистика
    const sentCount = await Request.countDocuments({ senderCompanyId: testCompanyId });
    const receivedCount = await Request.countDocuments({ recipientCompanyId: testCompanyId });
    const withResponses = await Request.countDocuments({ senderCompanyId: testCompanyId, response: { $ne: null } });

    console.log('📊 Statistics:');
    console.log('  - Sent requests:', sentCount);
    console.log('  - Received requests:', receivedCount);
    console.log('  - With responses:', withResponses);

  } catch (error) {
    console.error('❌ Error:', error);
    process.exit(1);
  } finally {
    await mongoose.connection.close();
    console.log('👋 Disconnected from MongoDB');
  }
}

seedRequests();

