geolite 0.0.13

open source geocode solution
pub mod admin_levels_hierarchy;
pub mod coordinates;
pub mod user_friendly_name;

use clap::Subcommand;

use crate::interfaces::cli::optimize::merge_admin_levels;

#[derive(Subcommand)]
pub enum index_commands {
  #[command(name = "admin-levels-hierarchy")]
  admin_levels_hierarchy,
  #[command(name = "user-friendly-name")]
  user_friendly_name,
  #[command(name = "coordinates")]
  coordinates,
}

fn command_handler_index_search(
  sqlite_path: &str,
  index_path: &str,
  preset: &crate::presets::index_user_friendly_name_preset,
) {
  user_friendly_name::command_handler_index_user_friendly_name(sqlite_path, index_path, preset);
  println!();
  coordinates::command_handler_index_coordinates(sqlite_path);
}

pub fn command_handler_index_and_merge(
  sqlite_path: &str,
  index_path: &str,
  preset: &crate::presets::index_user_friendly_name_preset,
) {
  admin_levels_hierarchy::command_handler_index_admin_levels_hierarchy(sqlite_path);
  println!();
  println!("\x1b[2m── optimize merge-admin-levels\x1b[0m");
  merge_admin_levels::command_handler_optimize_merge_admin_levels(sqlite_path, index_path);
  println!();
  println!("\x1b[2m── index\x1b[0m");
  command_handler_index_search(sqlite_path, index_path, preset);
}

pub fn command_handler_index(
  sqlite_path: &str,
  index_path: &str,
  command: Option<index_commands>,
  preset: &crate::presets::index_user_friendly_name_preset,
) {
  match command {
    None => {
      admin_levels_hierarchy::command_handler_index_admin_levels_hierarchy(sqlite_path);
      println!();
      command_handler_index_search(sqlite_path, index_path, preset);
    }
    Some(index_commands::admin_levels_hierarchy) => {
      admin_levels_hierarchy::command_handler_index_admin_levels_hierarchy(sqlite_path)
    }
    Some(index_commands::user_friendly_name) => {
      user_friendly_name::command_handler_index_user_friendly_name(sqlite_path, index_path, preset)
    }
    Some(index_commands::coordinates) => {
      coordinates::command_handler_index_coordinates(sqlite_path)
    }
  }
}