USE bulo;

INSERT INTO usuarios (
  nome, primeiro_nome, sobrenome, cpf, email, celular, senha_hash,
  tipo, codigoind, indicador_codigo, status_verificacao
) VALUES
  (
    'Passageiro Demo Indicado', 'Passageiro', 'Demo Indicado',
    '99900000001', 'demo.indicado@bulo.local', '53990000001',
    '$2y$10$demo.demo.demo.demo.demo.demo.demo.demo.demo.demo.demo.demo',
    'passageiro', 'demopas1', 'dmnj137', 'aprovado'
  ),
  (
    'Passageiro Demo Sem Indicacao', 'Passageiro', 'Demo Sem Indicacao',
    '99900000002', 'demo.sem.indicacao@bulo.local', '53990000002',
    '$2y$10$demo.demo.demo.demo.demo.demo.demo.demo.demo.demo.demo.demo',
    'passageiro', 'demopas2', NULL, 'aprovado'
  )
ON DUPLICATE KEY UPDATE
  nome = VALUES(nome),
  primeiro_nome = VALUES(primeiro_nome),
  sobrenome = VALUES(sobrenome),
  indicador_codigo = VALUES(indicador_codigo),
  status_verificacao = VALUES(status_verificacao);

SET @passageiro_real := (SELECT id FROM usuarios WHERE tipo = 'passageiro' ORDER BY id LIMIT 1);
SET @passageiro_indicado := (SELECT id FROM usuarios WHERE email = 'demo.indicado@bulo.local' LIMIT 1);
SET @passageiro_sem_indicacao := (SELECT id FROM usuarios WHERE email = 'demo.sem.indicacao@bulo.local' LIMIT 1);
SET @motorista_sem_indicacao := (SELECT id FROM usuarios WHERE tipo = 'motorista' AND indicador_codigo IS NULL ORDER BY id LIMIT 1);
SET @motorista_indicado_a := (SELECT id FROM usuarios WHERE tipo = 'motorista' AND indicador_codigo IS NOT NULL ORDER BY id LIMIT 1);
SET @motorista_indicado_b := (SELECT id FROM usuarios WHERE tipo = 'motorista' AND indicador_codigo IS NOT NULL ORDER BY id DESC LIMIT 1);
SET @motorista_sem_indicacao := COALESCE(@motorista_sem_indicacao, @motorista_indicado_a);
SET @motorista_indicado_b := COALESCE(@motorista_indicado_b, @motorista_indicado_a);

CREATE TEMPORARY TABLE tmp_corridas_demo (
  id_passageiro INT NOT NULL,
  id_motorista INT NOT NULL,
  finalizada_em DATETIME NOT NULL,
  valor DECIMAL(10,2) NOT NULL,
  forma_pagamento ENUM('dinheiro', 'online') NOT NULL,
  distancia DECIMAL(10,2) NOT NULL,
  tempo_estimado VARCHAR(60) NOT NULL
);

INSERT INTO tmp_corridas_demo (id_passageiro, id_motorista, finalizada_em, valor, forma_pagamento, distancia, tempo_estimado) VALUES
  (@passageiro_real, @motorista_indicado_a, '2026-06-23 08:35:00', 18.90, 'dinheiro', 4.10, '12 min'),
  (@passageiro_indicado, @motorista_indicado_b, '2026-06-23 09:20:00', 24.50, 'online', 5.60, '16 min'),
  (@passageiro_sem_indicacao, @motorista_sem_indicacao, '2026-06-23 10:05:00', 31.20, 'dinheiro', 7.20, '19 min'),
  (@passageiro_indicado, @motorista_sem_indicacao, '2026-06-23 11:50:00', 42.75, 'online', 10.10, '27 min'),
  (@passageiro_real, @motorista_indicado_b, '2026-06-23 13:10:00', 19.80, 'dinheiro', 4.30, '13 min'),
  (@passageiro_sem_indicacao, @motorista_indicado_a, '2026-06-23 14:40:00', 56.10, 'online', 13.70, '35 min'),
  (@passageiro_indicado, @motorista_indicado_a, '2026-06-23 16:15:00', 27.40, 'dinheiro', 6.40, '18 min'),
  (@passageiro_sem_indicacao, @motorista_sem_indicacao, '2026-06-23 18:30:00', 34.60, 'online', 8.10, '23 min'),

  (@passageiro_indicado, @motorista_indicado_a, '2026-06-22 08:45:00', 21.30, 'dinheiro', 4.80, '14 min'),
  (@passageiro_real, @motorista_sem_indicacao, '2026-06-22 10:25:00', 38.40, 'online', 9.30, '25 min'),
  (@passageiro_sem_indicacao, @motorista_indicado_b, '2026-06-22 12:15:00', 17.90, 'dinheiro', 3.70, '11 min'),
  (@passageiro_indicado, @motorista_sem_indicacao, '2026-06-22 14:05:00', 45.80, 'online', 11.60, '31 min'),
  (@passageiro_real, @motorista_indicado_a, '2026-06-22 16:45:00', 29.70, 'dinheiro', 6.90, '20 min'),
  (@passageiro_sem_indicacao, @motorista_indicado_b, '2026-06-22 19:10:00', 63.20, 'online', 15.20, '39 min'),

  (@passageiro_indicado, @motorista_indicado_b, '2026-06-18 08:10:00', 26.80, 'dinheiro', 6.10, '17 min'),
  (@passageiro_sem_indicacao, @motorista_indicado_a, '2026-06-18 09:55:00', 33.90, 'online', 8.40, '24 min'),
  (@passageiro_real, @motorista_sem_indicacao, '2026-06-18 13:35:00', 49.60, 'dinheiro', 12.70, '32 min'),
  (@passageiro_indicado, @motorista_indicado_a, '2026-06-18 16:20:00', 22.45, 'online', 5.20, '15 min'),
  (@passageiro_sem_indicacao, @motorista_sem_indicacao, '2026-06-18 19:00:00', 57.30, 'dinheiro', 14.10, '36 min'),

  (@passageiro_real, @motorista_indicado_a, '2026-06-14 08:30:00', 20.60, 'dinheiro', 4.90, '13 min'),
  (@passageiro_indicado, @motorista_indicado_b, '2026-06-14 11:05:00', 48.90, 'online', 11.80, '30 min'),
  (@passageiro_sem_indicacao, @motorista_sem_indicacao, '2026-06-14 15:45:00', 36.70, 'dinheiro', 8.50, '22 min'),
  (@passageiro_indicado, @motorista_sem_indicacao, '2026-06-14 18:25:00', 61.80, 'online', 15.50, '41 min'),

  (@passageiro_sem_indicacao, @motorista_indicado_b, '2026-06-07 09:15:00', 23.90, 'dinheiro', 5.30, '15 min'),
  (@passageiro_indicado, @motorista_indicado_a, '2026-06-07 12:35:00', 52.40, 'online', 12.90, '34 min'),
  (@passageiro_real, @motorista_sem_indicacao, '2026-06-07 16:10:00', 41.25, 'dinheiro', 9.70, '27 min'),
  (@passageiro_indicado, @motorista_sem_indicacao, '2026-06-07 19:05:00', 28.90, 'online', 6.80, '19 min'),

  (@passageiro_indicado, @motorista_indicado_a, '2026-05-28 08:55:00', 35.20, 'online', 8.60, '24 min'),
  (@passageiro_real, @motorista_indicado_b, '2026-05-28 12:10:00', 18.70, 'dinheiro', 4.00, '12 min'),
  (@passageiro_sem_indicacao, @motorista_sem_indicacao, '2026-05-28 15:40:00', 44.30, 'dinheiro', 10.90, '29 min'),
  (@passageiro_indicado, @motorista_sem_indicacao, '2026-05-28 20:15:00', 67.50, 'online', 16.80, '43 min'),

  (@passageiro_real, @motorista_indicado_a, '2026-05-10 09:40:00', 25.60, 'dinheiro', 5.90, '16 min'),
  (@passageiro_indicado, @motorista_indicado_b, '2026-05-10 13:30:00', 58.40, 'online', 14.20, '38 min'),
  (@passageiro_sem_indicacao, @motorista_sem_indicacao, '2026-05-10 18:50:00', 47.90, 'dinheiro', 11.30, '31 min'),

  (@passageiro_indicado, @motorista_indicado_a, '2026-04-20 08:25:00', 22.80, 'dinheiro', 5.10, '14 min'),
  (@passageiro_sem_indicacao, @motorista_indicado_b, '2026-04-20 11:15:00', 39.60, 'online', 9.40, '26 min'),
  (@passageiro_real, @motorista_sem_indicacao, '2026-04-20 15:35:00', 54.20, 'dinheiro', 13.10, '35 min'),
  (@passageiro_indicado, @motorista_sem_indicacao, '2026-04-20 19:45:00', 73.90, 'online', 18.40, '49 min'),

  (@passageiro_real, @motorista_indicado_b, '2026-03-12 10:05:00', 31.70, 'dinheiro', 7.30, '20 min'),
  (@passageiro_indicado, @motorista_indicado_a, '2026-03-12 14:15:00', 46.20, 'online', 11.00, '30 min'),
  (@passageiro_sem_indicacao, @motorista_sem_indicacao, '2026-03-12 18:35:00', 62.10, 'dinheiro', 15.00, '39 min'),

  (@passageiro_indicado, @motorista_indicado_a, '2026-01-18 09:30:00', 29.40, 'online', 6.70, '18 min'),
  (@passageiro_real, @motorista_indicado_b, '2026-01-18 13:20:00', 37.80, 'dinheiro', 8.90, '24 min'),
  (@passageiro_sem_indicacao, @motorista_sem_indicacao, '2026-01-18 17:55:00', 55.60, 'online', 13.30, '36 min'),

  (@passageiro_indicado, @motorista_indicado_b, '2025-12-05 08:50:00', 24.70, 'dinheiro', 5.40, '15 min'),
  (@passageiro_real, @motorista_sem_indicacao, '2025-12-05 11:30:00', 40.90, 'online', 9.80, '27 min'),
  (@passageiro_sem_indicacao, @motorista_indicado_a, '2025-12-05 15:10:00', 51.60, 'dinheiro', 12.40, '33 min'),
  (@passageiro_indicado, @motorista_sem_indicacao, '2025-12-05 19:25:00', 69.80, 'online', 17.10, '45 min');

INSERT INTO corridas (
  id_passageiro, id_motorista, origem_lat, origem_lng, destino_lat, destino_lng,
  distancia, tempo_estimado, valor, forma_pagamento, status, aceita_em, finalizada_em, criada_em
)
SELECT
  s.id_passageiro,
  s.id_motorista,
  -31.7648000,
  -52.3376000,
  -31.7421000,
  -52.3194000,
  s.distancia,
  s.tempo_estimado,
  s.valor,
  s.forma_pagamento,
  'finalizada',
  DATE_SUB(s.finalizada_em, INTERVAL 24 MINUTE),
  s.finalizada_em,
  DATE_SUB(s.finalizada_em, INTERVAL 38 MINUTE)
FROM tmp_corridas_demo s
WHERE NOT EXISTS (
  SELECT 1
  FROM corridas c
  WHERE c.status = 'finalizada'
    AND c.id_passageiro = s.id_passageiro
    AND c.id_motorista = s.id_motorista
    AND c.finalizada_em = s.finalizada_em
    AND c.valor = s.valor
);

INSERT INTO ganhos_diarios (id_motorista, data_ref, total_corridas, total_valor)
SELECT id_motorista, DATE(finalizada_em) AS data_ref, COUNT(*) AS total_corridas, COALESCE(SUM(ROUND(valor * 0.85, 2)), 0) AS total_valor
FROM corridas
WHERE status = 'finalizada'
  AND id_motorista IS NOT NULL
  AND finalizada_em IS NOT NULL
GROUP BY id_motorista, DATE(finalizada_em)
ON DUPLICATE KEY UPDATE
  total_corridas = VALUES(total_corridas),
  total_valor = VALUES(total_valor),
  atualizado_em = CURRENT_TIMESTAMP;

INSERT INTO motorista_sessoes_online (id_motorista, inicio_em, fim_em, duracao_segundos)
SELECT
  g.id_motorista,
  CONCAT(g.data_ref, ' 08:00:00') AS inicio_em,
  CONCAT(g.data_ref, ' 19:30:00') AS fim_em,
  TIMESTAMPDIFF(SECOND, CONCAT(g.data_ref, ' 08:00:00'), CONCAT(g.data_ref, ' 19:30:00')) AS duracao_segundos
FROM (
  SELECT id_motorista, DATE(finalizada_em) AS data_ref
  FROM tmp_corridas_demo
  GROUP BY id_motorista, DATE(finalizada_em)
) g
WHERE NOT EXISTS (
  SELECT 1
  FROM motorista_sessoes_online s
  WHERE s.id_motorista = g.id_motorista
    AND s.inicio_em = CONCAT(g.data_ref, ' 08:00:00')
);

DROP TEMPORARY TABLE IF EXISTS tmp_corridas_demo;
