#[derive(Debug, Clone)]
pub struct NamedRegion {
    pub name: &'static str,
    pub center_lat: f64,
    pub center_lon: f64,
    pub diameter_km: f64,
    pub kind: RegionKind,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum RegionKind {
    Basin,
    Planitia,
    Crater,
    Rupes,
    Quadrangle,
}

pub const MAJOR_REGIONS: &[NamedRegion] = &[
    NamedRegion {
        name: "Caloris Basin",
        center_lat: 30.5,
        center_lon: 170.2,
        diameter_km: 1550.0,
        kind: RegionKind::Basin,
    },
    NamedRegion {
        name: "Rembrandt Basin",
        center_lat: -33.0,
        center_lon: 88.0,
        diameter_km: 716.0,
        kind: RegionKind::Basin,
    },
    NamedRegion {
        name: "Beethoven Basin",
        center_lat: -20.0,
        center_lon: -124.0,
        diameter_km: 643.0,
        kind: RegionKind::Basin,
    },
    NamedRegion {
        name: "Tolstoj Basin",
        center_lat: -16.3,
        center_lon: -164.5,
        diameter_km: 510.0,
        kind: RegionKind::Basin,
    },
    NamedRegion {
        name: "Rachmaninoff Basin",
        center_lat: 27.6,
        center_lon: 57.6,
        diameter_km: 306.0,
        kind: RegionKind::Basin,
    },
    NamedRegion {
        name: "Borealis Planitia",
        center_lat: 73.0,
        center_lon: 80.0,
        diameter_km: 1500.0,
        kind: RegionKind::Planitia,
    },
    NamedRegion {
        name: "Suisei Planitia",
        center_lat: 59.0,
        center_lon: 151.0,
        diameter_km: 800.0,
        kind: RegionKind::Planitia,
    },
    NamedRegion {
        name: "Sobkou Planitia",
        center_lat: 40.0,
        center_lon: -130.0,
        diameter_km: 700.0,
        kind: RegionKind::Planitia,
    },
    NamedRegion {
        name: "Discovery Rupes",
        center_lat: -56.3,
        center_lon: -37.3,
        diameter_km: 650.0,
        kind: RegionKind::Rupes,
    },
    NamedRegion {
        name: "Enterprise Rupes",
        center_lat: -37.0,
        center_lon: 75.0,
        diameter_km: 820.0,
        kind: RegionKind::Rupes,
    },
    NamedRegion {
        name: "Carnegie Rupes",
        center_lat: 58.5,
        center_lon: -54.0,
        diameter_km: 570.0,
        kind: RegionKind::Rupes,
    },
    NamedRegion {
        name: "Kuiper Crater",
        center_lat: -11.0,
        center_lon: -31.5,
        diameter_km: 62.0,
        kind: RegionKind::Crater,
    },
    NamedRegion {
        name: "Degas Crater",
        center_lat: 37.1,
        center_lon: -127.0,
        diameter_km: 54.0,
        kind: RegionKind::Crater,
    },
    NamedRegion {
        name: "Debussy Crater",
        center_lat: -33.0,
        center_lon: -10.0,
        diameter_km: 80.0,
        kind: RegionKind::Crater,
    },
    NamedRegion {
        name: "Hokusai Crater",
        center_lat: 57.8,
        center_lon: 16.9,
        diameter_km: 114.0,
        kind: RegionKind::Crater,
    },
];

pub fn regions() -> &'static [&'static str] {
    &[
        "Caloris Basin",
        "Rembrandt Basin",
        "Beethoven Basin",
        "Tolstoj Basin",
        "Rachmaninoff Basin",
        "Borealis Planitia",
        "Suisei Planitia",
        "Sobkou Planitia",
        "Discovery Rupes",
        "Enterprise Rupes",
        "Carnegie Rupes",
        "Kuiper Crater",
        "Degas Crater",
        "Debussy Crater",
        "Hokusai Crater",
    ]
}

pub fn find_region(name: &str) -> Option<&'static NamedRegion> {
    MAJOR_REGIONS.iter().find(|r| r.name == name)
}

pub const QUADRANGLE_COUNT: usize = 15;

pub fn quadrangle_name(index: usize) -> &'static str {
    const NAMES: [&str; 15] = [
        "H-1 Borealis",
        "H-2 Victoria",
        "H-3 Shakespeare",
        "H-4 Raditladi",
        "H-5 Hokusai",
        "H-6 Kuiper",
        "H-7 Beethoven",
        "H-8 Tolstoj",
        "H-9 Eminescu",
        "H-10 Derain",
        "H-11 Discovery",
        "H-12 Michelangelo",
        "H-13 Neruda",
        "H-14 Bach",
        "H-15 Caloris",
    ];
    if index < 15 { NAMES[index] } else { "Unknown" }
}
