-- name: CreateTipoEvento :one
INSERT INTO tipos_eventos (nome, regiao) VALUES ($1, @regiao) RETURNING *;

-- name: ListTiposEventos :many
SELECT * FROM tipos_eventos WHERE regiao = @regiao ORDER BY nome;

-- name: GetTipoEventoByID :one
SELECT * FROM tipos_eventos WHERE id = $1 AND regiao = @regiao;

-- name: UpdateTipoEvento :one
UPDATE tipos_eventos SET nome = $2 WHERE id = $1 AND regiao = @regiao RETURNING *;

-- name: DeleteTipoEvento :exec
DELETE FROM tipos_eventos WHERE id = $1 AND regiao = @regiao;

-- name: CreatePrecoEvento :one
INSERT INTO precos_tipos_eventos (tipo_evento_id, funcao_profissional_id, valor, regiao) 
VALUES ($1, $2, $3, @regiao) 
ON CONFLICT (tipo_evento_id, funcao_profissional_id, regiao) DO UPDATE 
SET valor = $3
RETURNING *;

-- name: ListPrecosByEventoID :many
SELECT p.*, f.nome as funcao_nome 
FROM precos_tipos_eventos p
JOIN funcoes_profissionais f ON p.funcao_profissional_id = f.id
WHERE p.tipo_evento_id = $1;

-- name: GetPreco :one
SELECT * FROM precos_tipos_eventos WHERE tipo_evento_id = $1 AND funcao_profissional_id = $2 AND regiao = @regiao;

-- name: DeletePreco :exec
DELETE FROM precos_tipos_eventos WHERE id = $1;

-- name: GetStandardPrice :one
SELECT p.valor
FROM precos_tipos_eventos p
JOIN tipos_eventos te ON p.tipo_evento_id = te.id
JOIN funcoes_profissionais f ON p.funcao_profissional_id = f.id
WHERE te.nome ILIKE $1 
  AND f.nome ILIKE $2 
  AND te.regiao = @regiao
  AND p.regiao = @regiao
ORDER BY p.criado_em DESC
LIMIT 1;

-- name: GetTipoEventoByNome :one
SELECT * FROM tipos_eventos WHERE nome = $1 AND regiao = @regiao;
