-- name: CreateEscala :one
INSERT INTO agenda_escalas (
  agenda_id, profissional_id, data_hora_inicio, data_hora_fim, funcao_especifica
) VALUES (
  $1, $2, $3, $4, $5
)
RETURNING *;

-- name: ListEscalasByAgendaID :many
SELECT e.*, p.nome as profissional_nome, p.avatar_url, p.whatsapp, f.nome as funcao_nome
FROM agenda_escalas e
JOIN cadastro_profissionais p ON e.profissional_id = p.id
LEFT JOIN funcoes_profissionais f ON p.funcao_profissional_id = f.id
WHERE e.agenda_id = $1
ORDER BY e.data_hora_inicio;

-- name: DeleteEscala :exec
DELETE FROM agenda_escalas
WHERE id = $1;

-- name: UpdateEscala :one
UPDATE agenda_escalas
SET profissional_id = COALESCE($2, profissional_id),
    data_hora_inicio = COALESCE($3, data_hora_inicio),
    data_hora_fim = COALESCE($4, data_hora_fim),
    funcao_especifica = COALESCE($5, funcao_especifica),
    atualizado_em = NOW()
WHERE id = $1
RETURNING *;

-- name: ListMapasByAgendaID :many
SELECT * FROM mapas_eventos
WHERE agenda_id = $1
ORDER BY criado_em;

-- name: CreateMapa :one
INSERT INTO mapas_eventos (agenda_id, nome, imagem_url)
VALUES ($1, $2, $3)
RETURNING *;

-- name: DeleteMapa :exec
DELETE FROM mapas_eventos WHERE id = $1;

-- name: ListMarcadoresByMapaID :many
SELECT m.*, p.nome as profissional_nome, p.avatar_url, f.nome as funcao_nome
FROM marcadores_mapa m
LEFT JOIN cadastro_profissionais p ON m.profissional_id = p.id
LEFT JOIN funcoes_profissionais f ON p.funcao_profissional_id = f.id
WHERE m.mapa_id = $1;

-- name: UpsertMarcador :one
INSERT INTO marcadores_mapa (mapa_id, profissional_id, pos_x, pos_y, rotulo)
VALUES ($1, $2, $3, $4, $5)
ON CONFLICT (id) DO UPDATE
SET pos_x = EXCLUDED.pos_x,
    pos_y = EXCLUDED.pos_y,
    rotulo = EXCLUDED.rotulo,
    profissional_id = EXCLUDED.profissional_id
RETURNING *;

-- name: DeleteMarcador :exec
DELETE FROM marcadores_mapa WHERE id = $1;
