USE bulo;

CREATE TABLE IF NOT EXISTS configuracoes (
  chave VARCHAR(80) PRIMARY KEY,
  valor DECIMAL(10,2) NOT NULL,
  descricao VARCHAR(255) NULL,
  atualizado_por VARCHAR(80) NULL,
  atualizado_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

SET @col_exists := (
  SELECT COUNT(*)
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE TABLE_SCHEMA = DATABASE()
    AND TABLE_NAME = 'configuracoes'
    AND COLUMN_NAME = 'atualizado_por'
);

SET @sql := IF(
  @col_exists = 0,
  'ALTER TABLE configuracoes ADD COLUMN atualizado_por VARCHAR(80) NULL AFTER descricao',
  'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

CREATE TABLE IF NOT EXISTS configuracoes_historico (
  id INT AUTO_INCREMENT PRIMARY KEY,
  chave VARCHAR(80) NOT NULL,
  valor_anterior DECIMAL(10,2) NULL,
  valor_novo DECIMAL(10,2) NOT NULL,
  alterado_por VARCHAR(80) NOT NULL,
  alterado_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  INDEX idx_config_historico_chave (chave),
  INDEX idx_config_historico_alterado_em (alterado_em)
);

INSERT INTO configuracoes (chave, valor, descricao, atualizado_por) VALUES
  ('preco_base', 5.00, 'Valor inicial fixo da corrida', 'sistema'),
  ('preco_por_km', 2.50, 'Valor cobrado por quilometro', 'sistema'),
  ('preco_por_minuto', 0.35, 'Valor cobrado por minuto estimado', 'sistema'),
  ('taxa_servico', 0.00, 'Taxa fixa adicional da plataforma', 'sistema'),
  ('valor_minimo', 5.00, 'Menor valor permitido para a corrida', 'sistema'),
  ('plus_preco_base', 5.00, 'Plus: valor inicial fixo da corrida', 'sistema'),
  ('plus_preco_por_km', 2.50, 'Plus: valor cobrado por quilometro', 'sistema'),
  ('plus_preco_por_minuto', 0.35, 'Plus: valor cobrado por minuto estimado', 'sistema'),
  ('plus_taxa_servico', 0.00, 'Plus: taxa fixa adicional da plataforma', 'sistema'),
  ('plus_valor_minimo', 5.00, 'Plus: menor valor permitido para a corrida', 'sistema'),
  ('pro_preco_base', 5.00, 'Pro: valor inicial fixo da corrida', 'sistema'),
  ('pro_preco_por_km', 2.50, 'Pro: valor cobrado por quilometro', 'sistema'),
  ('pro_preco_por_minuto', 0.35, 'Pro: valor cobrado por minuto estimado', 'sistema'),
  ('pro_taxa_servico', 0.00, 'Pro: taxa fixa adicional da plataforma', 'sistema'),
  ('pro_valor_minimo', 5.00, 'Pro: menor valor permitido para a corrida', 'sistema')
ON DUPLICATE KEY UPDATE
  valor = VALUES(valor),
  descricao = VALUES(descricao),
  atualizado_por = COALESCE(configuracoes.atualizado_por, VALUES(atualizado_por));
