-- name: CreateNoteVersion :one
INSERT INTO note_versions (note_id, title, content, version_number, content_hash)
VALUES (
    $1, 
    $2, 
    $3,
    (SELECT COALESCE(MAX(version_number), 0) + 1 FROM note_versions WHERE note_id = $1),
    encode(sha256($2::bytea || '\n'::bytea || $3::bytea), 'hex')
)
RETURNING *;

-- name: GetNoteVersions :many
SELECT * FROM note_versions
WHERE note_id = $1
ORDER BY version_number DESC
LIMIT $2 OFFSET $3;

-- name: GetNoteVersion :one
SELECT * FROM note_versions
WHERE note_id = $1 AND version_number = $2 LIMIT 1;

-- name: FindDuplicateContent :one
SELECT EXISTS(
    SELECT 1 FROM note_versions
    WHERE note_id = $1
    AND content_hash = encode(sha256($2::bytea || '\n'::bytea || $3::bytea), 'hex')
);
