package db

import (
	"context"
	"database/sql"
	"time"

	_ "github.com/go-sql-driver/mysql"

	"gitlab.com/dynaweb/ains-microservices/pkg/config"
)

func Open(cfg *config.Config) (*sql.DB, error) {
	conn, err := sql.Open("mysql", cfg.DB.DSN())
	if err != nil {
		return nil, err
	}

	conn.SetMaxOpenConns(20)
	conn.SetMaxIdleConns(10)
	conn.SetConnMaxLifetime(30 * time.Minute)
	conn.SetConnMaxIdleTime(5 * time.Minute)

	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()

	if err := conn.PingContext(ctx); err != nil {
		_ = conn.Close()
		return nil, err
	}

	return conn, nil
}
