use fob_gen::{Allocator, JsBuilder};
use oxc_ast::ast::Statement;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let allocator = Allocator::default();
let js = JsBuilder::new(&allocator);
let fetch_call = js.call(js.ident("fetch"), vec![js.arg(js.ident("url"))]);
let response_decl = js.const_decl("response", fetch_call);
let condition = js.not(js.member(js.ident("response"), "ok"));
let error_msg = js.template_literal(
vec!["HTTP error! status: ", ""],
vec![js.member(js.ident("response"), "status")],
);
let throw_stmt = js.throw(js.new_expr(js.ident("Error"), vec![js.arg(error_msg)]));
let if_stmt = js.if_stmt(condition, vec![throw_stmt], None);
let json_call = js.call(js.member(js.ident("response"), "json"), vec![]);
let return_stmt = js.return_stmt(Some(json_call));
let get_method = js.arrow_fn_block(vec!["url"], vec![response_decl, if_stmt, return_stmt]);
let api_client_obj = js.object(vec![js.prop("get", get_method)]);
let api_client_decl = js.const_decl("ApiClient", api_client_obj);
let export_default = js.export_default(js.ident("ApiClient"));
let code = js.program(vec![api_client_decl, Statement::from(export_default)])?;
println!("{}", code);
Ok(())
}