// Code generated by sqlc. DO NOT EDIT.
// versions:
//   sqlc v1.30.0

package db

import (
	"context"
	"database/sql"
	"fmt"
)

type DBTX interface {
	ExecContext(context.Context, string, ...interface{}) (sql.Result, error)
	PrepareContext(context.Context, string) (*sql.Stmt, error)
	QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error)
	QueryRowContext(context.Context, string, ...interface{}) *sql.Row
}

func New(db DBTX) *Queries {
	return &Queries{db: db}
}

func Prepare(ctx context.Context, db DBTX) (*Queries, error) {
	q := Queries{db: db}
	var err error
	if q.createFileStmt, err = db.PrepareContext(ctx, createFile); err != nil {
		return nil, fmt.Errorf("error preparing query CreateFile: %w", err)
	}
	if q.createMessageStmt, err = db.PrepareContext(ctx, createMessage); err != nil {
		return nil, fmt.Errorf("error preparing query CreateMessage: %w", err)
	}
	if q.createSessionStmt, err = db.PrepareContext(ctx, createSession); err != nil {
		return nil, fmt.Errorf("error preparing query CreateSession: %w", err)
	}
	if q.deleteFileStmt, err = db.PrepareContext(ctx, deleteFile); err != nil {
		return nil, fmt.Errorf("error preparing query DeleteFile: %w", err)
	}
	if q.deleteMessageStmt, err = db.PrepareContext(ctx, deleteMessage); err != nil {
		return nil, fmt.Errorf("error preparing query DeleteMessage: %w", err)
	}
	if q.deleteSessionStmt, err = db.PrepareContext(ctx, deleteSession); err != nil {
		return nil, fmt.Errorf("error preparing query DeleteSession: %w", err)
	}
	if q.deleteSessionFilesStmt, err = db.PrepareContext(ctx, deleteSessionFiles); err != nil {
		return nil, fmt.Errorf("error preparing query DeleteSessionFiles: %w", err)
	}
	if q.deleteSessionMessagesStmt, err = db.PrepareContext(ctx, deleteSessionMessages); err != nil {
		return nil, fmt.Errorf("error preparing query DeleteSessionMessages: %w", err)
	}
	if q.getAverageResponseTimeStmt, err = db.PrepareContext(ctx, getAverageResponseTime); err != nil {
		return nil, fmt.Errorf("error preparing query GetAverageResponseTime: %w", err)
	}
	if q.getFileStmt, err = db.PrepareContext(ctx, getFile); err != nil {
		return nil, fmt.Errorf("error preparing query GetFile: %w", err)
	}
	if q.getFileByPathAndSessionStmt, err = db.PrepareContext(ctx, getFileByPathAndSession); err != nil {
		return nil, fmt.Errorf("error preparing query GetFileByPathAndSession: %w", err)
	}
	if q.getFileReadStmt, err = db.PrepareContext(ctx, getFileRead); err != nil {
		return nil, fmt.Errorf("error preparing query GetFileRead: %w", err)
	}
	if q.getHourDayHeatmapStmt, err = db.PrepareContext(ctx, getHourDayHeatmap); err != nil {
		return nil, fmt.Errorf("error preparing query GetHourDayHeatmap: %w", err)
	}
	if q.getMessageStmt, err = db.PrepareContext(ctx, getMessage); err != nil {
		return nil, fmt.Errorf("error preparing query GetMessage: %w", err)
	}
	if q.getRecentActivityStmt, err = db.PrepareContext(ctx, getRecentActivity); err != nil {
		return nil, fmt.Errorf("error preparing query GetRecentActivity: %w", err)
	}
	if q.getSessionByIDStmt, err = db.PrepareContext(ctx, getSessionByID); err != nil {
		return nil, fmt.Errorf("error preparing query GetSessionByID: %w", err)
	}
	if q.getToolUsageStmt, err = db.PrepareContext(ctx, getToolUsage); err != nil {
		return nil, fmt.Errorf("error preparing query GetToolUsage: %w", err)
	}
	if q.getTotalStatsStmt, err = db.PrepareContext(ctx, getTotalStats); err != nil {
		return nil, fmt.Errorf("error preparing query GetTotalStats: %w", err)
	}
	if q.getUsageByDayStmt, err = db.PrepareContext(ctx, getUsageByDay); err != nil {
		return nil, fmt.Errorf("error preparing query GetUsageByDay: %w", err)
	}
	if q.getUsageByDayOfWeekStmt, err = db.PrepareContext(ctx, getUsageByDayOfWeek); err != nil {
		return nil, fmt.Errorf("error preparing query GetUsageByDayOfWeek: %w", err)
	}
	if q.getUsageByHourStmt, err = db.PrepareContext(ctx, getUsageByHour); err != nil {
		return nil, fmt.Errorf("error preparing query GetUsageByHour: %w", err)
	}
	if q.getUsageByModelStmt, err = db.PrepareContext(ctx, getUsageByModel); err != nil {
		return nil, fmt.Errorf("error preparing query GetUsageByModel: %w", err)
	}
	if q.listAllUserMessagesStmt, err = db.PrepareContext(ctx, listAllUserMessages); err != nil {
		return nil, fmt.Errorf("error preparing query ListAllUserMessages: %w", err)
	}
	if q.listFilesByPathStmt, err = db.PrepareContext(ctx, listFilesByPath); err != nil {
		return nil, fmt.Errorf("error preparing query ListFilesByPath: %w", err)
	}
	if q.listFilesBySessionStmt, err = db.PrepareContext(ctx, listFilesBySession); err != nil {
		return nil, fmt.Errorf("error preparing query ListFilesBySession: %w", err)
	}
	if q.listLatestSessionFilesStmt, err = db.PrepareContext(ctx, listLatestSessionFiles); err != nil {
		return nil, fmt.Errorf("error preparing query ListLatestSessionFiles: %w", err)
	}
	if q.listMessagesBySessionStmt, err = db.PrepareContext(ctx, listMessagesBySession); err != nil {
		return nil, fmt.Errorf("error preparing query ListMessagesBySession: %w", err)
	}
	if q.listNewFilesStmt, err = db.PrepareContext(ctx, listNewFiles); err != nil {
		return nil, fmt.Errorf("error preparing query ListNewFiles: %w", err)
	}
	if q.listSessionReadFilesStmt, err = db.PrepareContext(ctx, listSessionReadFiles); err != nil {
		return nil, fmt.Errorf("error preparing query ListSessionReadFiles: %w", err)
	}
	if q.listSessionsStmt, err = db.PrepareContext(ctx, listSessions); err != nil {
		return nil, fmt.Errorf("error preparing query ListSessions: %w", err)
	}
	if q.listUserMessagesBySessionStmt, err = db.PrepareContext(ctx, listUserMessagesBySession); err != nil {
		return nil, fmt.Errorf("error preparing query ListUserMessagesBySession: %w", err)
	}
	if q.recordFileReadStmt, err = db.PrepareContext(ctx, recordFileRead); err != nil {
		return nil, fmt.Errorf("error preparing query RecordFileRead: %w", err)
	}
	if q.updateMessageStmt, err = db.PrepareContext(ctx, updateMessage); err != nil {
		return nil, fmt.Errorf("error preparing query UpdateMessage: %w", err)
	}
	if q.updateSessionStmt, err = db.PrepareContext(ctx, updateSession); err != nil {
		return nil, fmt.Errorf("error preparing query UpdateSession: %w", err)
	}
	if q.updateSessionTitleAndUsageStmt, err = db.PrepareContext(ctx, updateSessionTitleAndUsage); err != nil {
		return nil, fmt.Errorf("error preparing query UpdateSessionTitleAndUsage: %w", err)
	}
	return &q, nil
}

func (q *Queries) Close() error {
	var err error
	if q.createFileStmt != nil {
		if cerr := q.createFileStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing createFileStmt: %w", cerr)
		}
	}
	if q.createMessageStmt != nil {
		if cerr := q.createMessageStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing createMessageStmt: %w", cerr)
		}
	}
	if q.createSessionStmt != nil {
		if cerr := q.createSessionStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing createSessionStmt: %w", cerr)
		}
	}
	if q.deleteFileStmt != nil {
		if cerr := q.deleteFileStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing deleteFileStmt: %w", cerr)
		}
	}
	if q.deleteMessageStmt != nil {
		if cerr := q.deleteMessageStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing deleteMessageStmt: %w", cerr)
		}
	}
	if q.deleteSessionStmt != nil {
		if cerr := q.deleteSessionStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing deleteSessionStmt: %w", cerr)
		}
	}
	if q.deleteSessionFilesStmt != nil {
		if cerr := q.deleteSessionFilesStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing deleteSessionFilesStmt: %w", cerr)
		}
	}
	if q.deleteSessionMessagesStmt != nil {
		if cerr := q.deleteSessionMessagesStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing deleteSessionMessagesStmt: %w", cerr)
		}
	}
	if q.getAverageResponseTimeStmt != nil {
		if cerr := q.getAverageResponseTimeStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing getAverageResponseTimeStmt: %w", cerr)
		}
	}
	if q.getFileStmt != nil {
		if cerr := q.getFileStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing getFileStmt: %w", cerr)
		}
	}
	if q.getFileByPathAndSessionStmt != nil {
		if cerr := q.getFileByPathAndSessionStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing getFileByPathAndSessionStmt: %w", cerr)
		}
	}
	if q.getFileReadStmt != nil {
		if cerr := q.getFileReadStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing getFileReadStmt: %w", cerr)
		}
	}
	if q.getHourDayHeatmapStmt != nil {
		if cerr := q.getHourDayHeatmapStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing getHourDayHeatmapStmt: %w", cerr)
		}
	}
	if q.getMessageStmt != nil {
		if cerr := q.getMessageStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing getMessageStmt: %w", cerr)
		}
	}
	if q.getRecentActivityStmt != nil {
		if cerr := q.getRecentActivityStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing getRecentActivityStmt: %w", cerr)
		}
	}
	if q.getSessionByIDStmt != nil {
		if cerr := q.getSessionByIDStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing getSessionByIDStmt: %w", cerr)
		}
	}
	if q.getToolUsageStmt != nil {
		if cerr := q.getToolUsageStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing getToolUsageStmt: %w", cerr)
		}
	}
	if q.getTotalStatsStmt != nil {
		if cerr := q.getTotalStatsStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing getTotalStatsStmt: %w", cerr)
		}
	}
	if q.getUsageByDayStmt != nil {
		if cerr := q.getUsageByDayStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing getUsageByDayStmt: %w", cerr)
		}
	}
	if q.getUsageByDayOfWeekStmt != nil {
		if cerr := q.getUsageByDayOfWeekStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing getUsageByDayOfWeekStmt: %w", cerr)
		}
	}
	if q.getUsageByHourStmt != nil {
		if cerr := q.getUsageByHourStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing getUsageByHourStmt: %w", cerr)
		}
	}
	if q.getUsageByModelStmt != nil {
		if cerr := q.getUsageByModelStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing getUsageByModelStmt: %w", cerr)
		}
	}
	if q.listAllUserMessagesStmt != nil {
		if cerr := q.listAllUserMessagesStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing listAllUserMessagesStmt: %w", cerr)
		}
	}
	if q.listFilesByPathStmt != nil {
		if cerr := q.listFilesByPathStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing listFilesByPathStmt: %w", cerr)
		}
	}
	if q.listFilesBySessionStmt != nil {
		if cerr := q.listFilesBySessionStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing listFilesBySessionStmt: %w", cerr)
		}
	}
	if q.listLatestSessionFilesStmt != nil {
		if cerr := q.listLatestSessionFilesStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing listLatestSessionFilesStmt: %w", cerr)
		}
	}
	if q.listMessagesBySessionStmt != nil {
		if cerr := q.listMessagesBySessionStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing listMessagesBySessionStmt: %w", cerr)
		}
	}
	if q.listNewFilesStmt != nil {
		if cerr := q.listNewFilesStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing listNewFilesStmt: %w", cerr)
		}
	}
	if q.listSessionReadFilesStmt != nil {
		if cerr := q.listSessionReadFilesStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing listSessionReadFilesStmt: %w", cerr)
		}
	}
	if q.listSessionsStmt != nil {
		if cerr := q.listSessionsStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing listSessionsStmt: %w", cerr)
		}
	}
	if q.listUserMessagesBySessionStmt != nil {
		if cerr := q.listUserMessagesBySessionStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing listUserMessagesBySessionStmt: %w", cerr)
		}
	}
	if q.recordFileReadStmt != nil {
		if cerr := q.recordFileReadStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing recordFileReadStmt: %w", cerr)
		}
	}
	if q.updateMessageStmt != nil {
		if cerr := q.updateMessageStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing updateMessageStmt: %w", cerr)
		}
	}
	if q.updateSessionStmt != nil {
		if cerr := q.updateSessionStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing updateSessionStmt: %w", cerr)
		}
	}
	if q.updateSessionTitleAndUsageStmt != nil {
		if cerr := q.updateSessionTitleAndUsageStmt.Close(); cerr != nil {
			err = fmt.Errorf("error closing updateSessionTitleAndUsageStmt: %w", cerr)
		}
	}
	return err
}

func (q *Queries) exec(ctx context.Context, stmt *sql.Stmt, query string, args ...interface{}) (sql.Result, error) {
	switch {
	case stmt != nil && q.tx != nil:
		return q.tx.StmtContext(ctx, stmt).ExecContext(ctx, args...)
	case stmt != nil:
		return stmt.ExecContext(ctx, args...)
	default:
		return q.db.ExecContext(ctx, query, args...)
	}
}

func (q *Queries) query(ctx context.Context, stmt *sql.Stmt, query string, args ...interface{}) (*sql.Rows, error) {
	switch {
	case stmt != nil && q.tx != nil:
		return q.tx.StmtContext(ctx, stmt).QueryContext(ctx, args...)
	case stmt != nil:
		return stmt.QueryContext(ctx, args...)
	default:
		return q.db.QueryContext(ctx, query, args...)
	}
}

func (q *Queries) queryRow(ctx context.Context, stmt *sql.Stmt, query string, args ...interface{}) *sql.Row {
	switch {
	case stmt != nil && q.tx != nil:
		return q.tx.StmtContext(ctx, stmt).QueryRowContext(ctx, args...)
	case stmt != nil:
		return stmt.QueryRowContext(ctx, args...)
	default:
		return q.db.QueryRowContext(ctx, query, args...)
	}
}

type Queries struct {
	db                             DBTX
	tx                             *sql.Tx
	createFileStmt                 *sql.Stmt
	createMessageStmt              *sql.Stmt
	createSessionStmt              *sql.Stmt
	deleteFileStmt                 *sql.Stmt
	deleteMessageStmt              *sql.Stmt
	deleteSessionStmt              *sql.Stmt
	deleteSessionFilesStmt         *sql.Stmt
	deleteSessionMessagesStmt      *sql.Stmt
	getAverageResponseTimeStmt     *sql.Stmt
	getFileStmt                    *sql.Stmt
	getFileByPathAndSessionStmt    *sql.Stmt
	getFileReadStmt                *sql.Stmt
	getHourDayHeatmapStmt          *sql.Stmt
	getMessageStmt                 *sql.Stmt
	getRecentActivityStmt          *sql.Stmt
	getSessionByIDStmt             *sql.Stmt
	getToolUsageStmt               *sql.Stmt
	getTotalStatsStmt              *sql.Stmt
	getUsageByDayStmt              *sql.Stmt
	getUsageByDayOfWeekStmt        *sql.Stmt
	getUsageByHourStmt             *sql.Stmt
	getUsageByModelStmt            *sql.Stmt
	listAllUserMessagesStmt        *sql.Stmt
	listFilesByPathStmt            *sql.Stmt
	listFilesBySessionStmt         *sql.Stmt
	listLatestSessionFilesStmt     *sql.Stmt
	listMessagesBySessionStmt      *sql.Stmt
	listNewFilesStmt               *sql.Stmt
	listSessionReadFilesStmt       *sql.Stmt
	listSessionsStmt               *sql.Stmt
	listUserMessagesBySessionStmt  *sql.Stmt
	recordFileReadStmt             *sql.Stmt
	updateMessageStmt              *sql.Stmt
	updateSessionStmt              *sql.Stmt
	updateSessionTitleAndUsageStmt *sql.Stmt
}

func (q *Queries) WithTx(tx *sql.Tx) *Queries {
	return &Queries{
		db:                             tx,
		tx:                             tx,
		createFileStmt:                 q.createFileStmt,
		createMessageStmt:              q.createMessageStmt,
		createSessionStmt:              q.createSessionStmt,
		deleteFileStmt:                 q.deleteFileStmt,
		deleteMessageStmt:              q.deleteMessageStmt,
		deleteSessionStmt:              q.deleteSessionStmt,
		deleteSessionFilesStmt:         q.deleteSessionFilesStmt,
		deleteSessionMessagesStmt:      q.deleteSessionMessagesStmt,
		getAverageResponseTimeStmt:     q.getAverageResponseTimeStmt,
		getFileStmt:                    q.getFileStmt,
		getFileByPathAndSessionStmt:    q.getFileByPathAndSessionStmt,
		getFileReadStmt:                q.getFileReadStmt,
		getHourDayHeatmapStmt:          q.getHourDayHeatmapStmt,
		getMessageStmt:                 q.getMessageStmt,
		getRecentActivityStmt:          q.getRecentActivityStmt,
		getSessionByIDStmt:             q.getSessionByIDStmt,
		getToolUsageStmt:               q.getToolUsageStmt,
		getTotalStatsStmt:              q.getTotalStatsStmt,
		getUsageByDayStmt:              q.getUsageByDayStmt,
		getUsageByDayOfWeekStmt:        q.getUsageByDayOfWeekStmt,
		getUsageByHourStmt:             q.getUsageByHourStmt,
		getUsageByModelStmt:            q.getUsageByModelStmt,
		listAllUserMessagesStmt:        q.listAllUserMessagesStmt,
		listFilesByPathStmt:            q.listFilesByPathStmt,
		listFilesBySessionStmt:         q.listFilesBySessionStmt,
		listLatestSessionFilesStmt:     q.listLatestSessionFilesStmt,
		listMessagesBySessionStmt:      q.listMessagesBySessionStmt,
		listNewFilesStmt:               q.listNewFilesStmt,
		listSessionReadFilesStmt:       q.listSessionReadFilesStmt,
		listSessionsStmt:               q.listSessionsStmt,
		listUserMessagesBySessionStmt:  q.listUserMessagesBySessionStmt,
		recordFileReadStmt:             q.recordFileReadStmt,
		updateMessageStmt:              q.updateMessageStmt,
		updateSessionStmt:              q.updateSessionStmt,
		updateSessionTitleAndUsageStmt: q.updateSessionTitleAndUsageStmt,
	}
}
