USE bulo;

ALTER TABLE corridas
  ADD COLUMN IF NOT EXISTS saldo_negativo_cobrado DECIMAL(10,2) NOT NULL DEFAULT 0.00 AFTER valor,
  ADD COLUMN IF NOT EXISTS distancia_motorista_aceite_km DECIMAL(10,3) NULL AFTER aceita_em,
  ADD COLUMN IF NOT EXISTS tempo_motorista_aceite_min DECIMAL(10,2) NULL AFTER distancia_motorista_aceite_km,
  ADD COLUMN IF NOT EXISTS cancelada_em DATETIME NULL AFTER iniciou_viagem_em,
  ADD COLUMN IF NOT EXISTS cancelada_por ENUM('passageiro', 'motorista', 'admin', 'sistema') NULL AFTER cancelada_em,
  ADD COLUMN IF NOT EXISTS cancelamento_motivo VARCHAR(120) NULL AFTER cancelada_por,
  ADD COLUMN IF NOT EXISTS cancelamento_observacao TEXT NULL AFTER cancelamento_motivo,
  ADD COLUMN IF NOT EXISTS cancelamento_taxa DECIMAL(10,2) NOT NULL DEFAULT 0.00 AFTER cancelamento_observacao,
  ADD COLUMN IF NOT EXISTS cancelamento_valor_motorista DECIMAL(10,2) NOT NULL DEFAULT 0.00 AFTER cancelamento_taxa,
  ADD COLUMN IF NOT EXISTS distancia_motorista_cancelamento_km DECIMAL(10,3) NULL AFTER cancelamento_valor_motorista;

CREATE TABLE IF NOT EXISTS passageiro_carteira_movimentos (
  id INT AUTO_INCREMENT PRIMARY KEY,
  id_passageiro INT NOT NULL,
  id_corrida INT NULL,
  tipo ENUM('credito', 'debito', 'recarga_pix', 'estorno', 'ajuste') NOT NULL DEFAULT 'credito',
  origem ENUM('pix', 'cartao', 'corrida', 'admin', 'sistema') NOT NULL DEFAULT 'sistema',
  valor DECIMAL(10,2) NOT NULL DEFAULT 0.00,
  descricao VARCHAR(180) NOT NULL,
  status ENUM('confirmado', 'pendente', 'cancelado') NOT NULL DEFAULT 'confirmado',
  criado_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  CONSTRAINT fk_pass_carteira_usuario FOREIGN KEY (id_passageiro) REFERENCES usuarios(id),
  CONSTRAINT fk_pass_carteira_corrida FOREIGN KEY (id_corrida) REFERENCES corridas(id) ON DELETE SET NULL,
  INDEX idx_pass_carteira_usuario (id_passageiro, criado_em),
  INDEX idx_pass_carteira_status (status)
);

CREATE TABLE IF NOT EXISTS passageiro_pix_recargas (
  id INT AUTO_INCREMENT PRIMARY KEY,
  id_passageiro INT NOT NULL,
  valor DECIMAL(10,2) NOT NULL,
  status ENUM('pendente', 'pago', 'cancelado', 'expirado') NOT NULL DEFAULT 'pendente',
  txid VARCHAR(80) NULL,
  pix_copia_cola TEXT NULL,
  observacao VARCHAR(180) NULL,
  criado_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  atualizado_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  CONSTRAINT fk_pass_pix_usuario FOREIGN KEY (id_passageiro) REFERENCES usuarios(id),
  INDEX idx_pass_pix_usuario (id_passageiro, criado_em),
  INDEX idx_pass_pix_status (status)
);

CREATE TABLE IF NOT EXISTS passageiro_cartoes (
  id INT AUTO_INCREMENT PRIMARY KEY,
  id_passageiro INT NOT NULL,
  apelido VARCHAR(80) NULL,
  bandeira VARCHAR(40) NULL,
  ultimos4 CHAR(4) NOT NULL,
  validade_mes TINYINT NULL,
  validade_ano SMALLINT NULL,
  token_gateway VARCHAR(160) NULL,
  ativo TINYINT(1) NOT NULL DEFAULT 1,
  criado_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  atualizado_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  CONSTRAINT fk_pass_cartoes_usuario FOREIGN KEY (id_passageiro) REFERENCES usuarios(id),
  INDEX idx_pass_cartoes_usuario (id_passageiro, ativo)
);
