// Package dbdsn contains reusable database DSN normalization helpers.
package dbdsn

import (
	"strings"

	driversql "github.com/go-sql-driver/mysql"
)

// DefaultMySQLParseTime enables parseTime when the DSN does not specify it.
// Invalid DSNs are returned unchanged so the database opener reports the error.
func DefaultMySQLParseTime(dsn string) string {
	cfg, err := driversql.ParseDSN(dsn)
	if err != nil {
		return dsn
	}

	// Match go-sql-driver's grammar: parameters start after the first '?'
	// following the final '/'.
	querySource := dsn
	if lastSlash := strings.LastIndexByte(dsn, '/'); lastSlash >= 0 {
		querySource = dsn[lastSlash+1:]
	}
	_, params, hasParams := strings.Cut(querySource, "?")
	if hasParams {
		for _, param := range strings.Split(params, "&") {
			key, _, found := strings.Cut(param, "=")
			if found && key == "parseTime" {
				return dsn
			}
		}
	}
	cfg.ParseTime = true
	return cfg.FormatDSN()
}
