/*
 * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com).
 *
 * WSO2 LLC. licenses this file to you under the Apache License,
 * Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

package model

// DBQueryInterface defines the interface for database queries.
type DBQueryInterface interface {
	GetID() string
	GetQuery(dbType string) string
}

var _ DBQueryInterface = (*DBQuery)(nil)

// DBQuery represents database queries with an identifier and the SQL query string.
type DBQuery struct {
	// ID is the unique identifier for the query.
	ID            string `json:"id"`
	Query         string `json:"query"`
	PostgresQuery string `json:"postgres_query,omitempty"`
	SQLiteQuery   string `json:"sqlite_query,omitempty"`
}

// GetID returns the unique identifier for the query.
func (d *DBQuery) GetID() string {
	return d.ID
}

// GetQuery returns the appropriate query for the specified database type.
func (d *DBQuery) GetQuery(dbType string) string {
	switch dbType {
	case "postgres":
		if d.PostgresQuery != "" {
			return d.PostgresQuery
		}
	case "sqlite":
		if d.SQLiteQuery != "" {
			return d.SQLiteQuery
		}
	}
	// Fall back to the default query
	return d.Query
}
