// Code generated by sqlc. DO NOT EDIT.
// versions:
//   sqlc v1.31.1
// source: session_usage.sql

package acpsqlc

import (
	"context"

	"github.com/jackc/pgx/v5/pgtype"
)

const insertSessionUsage = `-- name: InsertSessionUsage :one
INSERT INTO acp_session_usage (
  session_id, user_id, project_id, agent_kind_id, model_id,
  prompt_tokens, completion_tokens, thinking_tokens, cost_usd, source_event_id
) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
ON CONFLICT (source_event_id) WHERE source_event_id IS NOT NULL DO NOTHING
RETURNING id
`

type InsertSessionUsageParams struct {
	SessionID        pgtype.UUID    `json:"session_id"`
	UserID           pgtype.UUID    `json:"user_id"`
	ProjectID        pgtype.UUID    `json:"project_id"`
	AgentKindID      pgtype.UUID    `json:"agent_kind_id"`
	ModelID          pgtype.UUID    `json:"model_id"`
	PromptTokens     int64          `json:"prompt_tokens"`
	CompletionTokens int64          `json:"completion_tokens"`
	ThinkingTokens   int64          `json:"thinking_tokens"`
	CostUsd          pgtype.Numeric `json:"cost_usd"`
	SourceEventID    *int64         `json:"source_event_id"`
}

// 写一条 per-turn 用量账目。source_event_id 非空时按唯一索引去重（同一事件
// 重复 Observe 不会重复入账）；返回受影响行数判定是否实际插入。
func (q *Queries) InsertSessionUsage(ctx context.Context, arg InsertSessionUsageParams) (int64, error) {
	row := q.db.QueryRow(ctx, insertSessionUsage,
		arg.SessionID,
		arg.UserID,
		arg.ProjectID,
		arg.AgentKindID,
		arg.ModelID,
		arg.PromptTokens,
		arg.CompletionTokens,
		arg.ThinkingTokens,
		arg.CostUsd,
		arg.SourceEventID,
	)
	var id int64
	err := row.Scan(&id)
	return id, err
}
