use graphar::FileType;
use graphar_flight::{FalkorExecutor, export::export_cypher};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut args = std::env::args().skip(1);
let url = args
.next()
.unwrap_or_else(|| "redis://127.0.0.1:6379".into());
let graph = args.next().unwrap_or_else(|| "demo".into());
let cypher = args
.next()
.unwrap_or_else(|| "MATCH (n) RETURN n._gar_id AS id LIMIT 100".into());
let out = args.next().unwrap_or_else(|| "/tmp/export.parquet".into());
let file_type = match out.rsplit_once('.').map(|(_, e)| e) {
Some("parquet") => FileType::Parquet,
Some("csv") => FileType::Csv,
Some("json") => FileType::Json,
Some("orc") => FileType::Orc,
Some("arrow") => FileType::ArrowIpc,
_ => FileType::Parquet,
};
let mut exec = FalkorExecutor::connect(&url, &graph).await?;
let report = export_cypher(&mut exec, &cypher, &out, file_type).await?;
println!(
"exported {} rows × {} cols → {out}",
report.rows, report.columns
);
Ok(())
}