USE bulo;

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)
);
