import 'reflect-metadata';
import { DataSource } from 'typeorm';
import { databaseConfig } from '../config/database';
import { User } from './entities/User.entity';
import { AvailabilitySchedule } from './entities/AvailabilitySchedule.entity';
import { AvailabilityDateOverride } from './entities/AvailabilityDateOverride.entity';
import { EventType } from './entities/EventType.entity';
import { CalendarConnection } from './entities/CalendarConnection.entity';
import { Booking } from './entities/Booking.entity';
import { CalendarEventSync } from './entities/CalendarEventSync.entity';
import { BusyBlock } from './entities/BusyBlock.entity';
import { AuditLog } from './entities/AuditLog.entity';
import { EmbedConfig } from './entities/EmbedConfig.entity';
import { ApiKey } from './entities/ApiKey.entity';
import { Timezone } from './entities/Timezone.entity';
import { UserEmailSettings } from './entities/UserEmailSettings.entity';
import { PasswordResetToken } from './entities/PasswordResetToken.entity';
import { Location } from './entities/Location.entity';

export const entities = [
  User,
  AvailabilitySchedule,
  AvailabilityDateOverride,
  EventType,
  CalendarConnection,
  Booking,
  CalendarEventSync,
  BusyBlock,
  AuditLog,
  EmbedConfig,
  ApiKey,
  Timezone,
  UserEmailSettings,
  PasswordResetToken,
  Location,
];

export const AppDataSource = new DataSource({
  ...databaseConfig,
  entities,
});

export async function initializeDatabase(): Promise<DataSource> {
  if (!AppDataSource.isInitialized) {
    await AppDataSource.initialize();
  }
  return AppDataSource;
}
