package database

import (
    "fmt"
    "log"
    "time"

    "api_bb/internal/models"
    "gorm.io/driver/postgres"
    "gorm.io/gorm"
)

func InitDB(dsn string) (*gorm.DB, error) {
    // Используем PostgreSQL драйвер
    db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
    if err != nil {
        return nil, fmt.Errorf("failed to connect to database: %w", err)
    }

    // Получаем underlying sql.DB для настройки пула соединений
    sqlDB, err := db.DB()
    if err != nil {
        return nil, fmt.Errorf("failed to get database instance: %w", err)
    }

    // Настраиваем пул соединений
    sqlDB.SetMaxIdleConns(10)
    sqlDB.SetMaxOpenConns(100)
    sqlDB.SetConnMaxLifetime(time.Hour)

    // Проверяем соединение
    if err := sqlDB.Ping(); err != nil {
        return nil, fmt.Errorf("database ping failed: %w", err)
    }

    log.Println("PostgreSQL connection established successfully")

    // Auto migrate models
    err = db.AutoMigrate(
        &models.User{},
        // Добавьте другие модели здесь по мере расширения
    )
    if err != nil {
        return nil, fmt.Errorf("failed to auto-migrate models: %w", err)
    }

    log.Println("Database migration completed successfully")

    return db, nil
}