// Инициализация схемы графовой базы данных для маркетплейса

// Создаем базу данных маркетплейса
db._createDatabase('marketplace');
db._useDatabase('marketplace');

// Коллекции узлов (vertices)
const collections = [
  'users',        // Пользователи платформы
  'companies',    // Компании (поставщики, логисты, лаборатории)
  'products',     // Товары и сырье
  'orders',       // Заказы и сделки
  'auctions',     // Тендеры и аукционы
  'locations',    // Географические локации
  'categories'    // Категории товаров
];

collections.forEach(name => {
  try {
    db._create(name);
    print(`Created collection: ${name}`);
  } catch (e) {
    print(`Collection ${name} already exists: ${e.message}`);
  }
});

// Коллекции связей (edges)
const edgeCollections = [
  'purchases',      // Покупки: user -> product
  'supplies',       // Поставки: company -> product  
  'participates',   // Участие в тендерах: user -> auction
  'collaborates',   // Сотрудничество: company -> company
  'locates',        // Местоположение: company/user -> location
  'categorizes',    // Категоризация: product -> category
  'recommends',     // Рекомендации: product -> product
  'transports',     // Логистика: company -> location
  'analyzes'        // Анализ качества: company -> product
];

edgeCollections.forEach(name => {
  try {
    db._createEdgeCollection(name);
    print(`Created edge collection: ${name}`);
  } catch (e) {
    print(`Edge collection ${name} already exists: ${e.message}`);
  }
});

// Создаем граф маркетплейса
try {
  const graph = require('@arangodb/general-graph');
  
  const graphDef = graph._create('marketplace_graph', [
    graph._relation('purchases', 'users', 'products'),
    graph._relation('supplies', 'companies', 'products'),
    graph._relation('participates', 'users', 'auctions'),
    graph._relation('collaborates', 'companies', 'companies'),
    graph._relation('locates', ['companies', 'users'], 'locations'),
    graph._relation('categorizes', 'products', 'categories'),
    graph._relation('recommends', 'products', 'products'),
    graph._relation('transports', 'companies', 'locations'),
    graph._relation('analyzes', 'companies', 'products')
  ]);
  
  print('Created marketplace graph successfully');
} catch (e) {
  print(`Graph already exists: ${e.message}`);
}

// Создаем индексы для оптимизации запросов
print('Creating indexes...');

// Индексы для пользователей
db.users.ensureIndex({ type: "hash", fields: ["email"] });
db.users.ensureIndex({ type: "hash", fields: ["role"] });

// Индексы для компаний
db.companies.ensureIndex({ type: "hash", fields: ["industry"] });
db.companies.ensureIndex({ type: "hash", fields: ["services"] });

// Индексы для товаров  
db.products.ensureIndex({ type: "hash", fields: ["category"] });
db.products.ensureIndex({ type: "fulltext", fields: ["name", "description"] });

// Индексы для заказов
db.orders.ensureIndex({ type: "skiplist", fields: ["created_at"] });
db.orders.ensureIndex({ type: "hash", fields: ["status"] });

print('Initialization completed successfully!');