package db

import (
	"database/sql"
	"fmt"

	_ "github.com/duckdb/duckdb-go/v2" // DuckDB driver
)

// OpenReadOnlyDB opens a DuckDB connection in read-only mode
// Provides additional security layer for query-only operations
// Caller must close the connection when done
func OpenReadOnlyDB(dbPath string) (*sql.DB, error) {
	connStr := dbPath + "?access_mode=read_only"
	db, err := sql.Open("duckdb", connStr)
	if err != nil {
		return nil, fmt.Errorf("failed to open database: %w", err)
	}

	if err = db.Ping(); err != nil {
		db.Close()
		return nil, fmt.Errorf("failed to ping database: %w", err)
	}

	return db, nil
}

// OpenWriteableDB opens a DuckDB connection in read-write mode
// Used for write operations (insert, update, delete)
// Caller must close the connection when done
func OpenWriteableDB(dbPath string) (*sql.DB, error) {
	connStr := dbPath + "?access_mode=read_write"
	db, err := sql.Open("duckdb", connStr)
	if err != nil {
		return nil, fmt.Errorf("failed to open database: %w", err)
	}

	if err = db.Ping(); err != nil {
		db.Close()
		return nil, fmt.Errorf("failed to ping database: %w", err)
	}

	return db, nil
}