# -*- coding: utf-8 -*-
"""
Wildlife Sound Locator — Vietnamese Species Database.

Comprehensive list of commonly heard wildlife species in Vietnamese
forests, organized by taxonomic group. Each entry includes:
    - Vietnamese name (tên Việt Nam)
    - Scientific name (tên khoa học)
    - IUCN Red List status
    - Vietnamese Red Book / NĐ84 status
    - Estimated audible range in meters (for hearing-distance reference)

Author: Lộc Vũ Trung (LVT) / Slow Forest
License: GPL-3.0

Scientific references:
    - IUCN Red List of Threatened Species (iucnredlist.org)
    - Vietnam Red Data Book (2007)
    - Nghị định 84 / 2021 / NĐ-CP
    - BirdLife International checklist for Vietnam
"""

# Taxonomic group codes
GROUP_MAMMAL = "Thú / Mammal"
GROUP_BIRD = "Chim / Bird"
GROUP_AMPHIBIAN = "Lưỡng cư / Amphibian"
GROUP_REPTILE = "Bò sát / Reptile"
GROUP_INSECT = "Côn trùng / Insect"

GROUPS = [GROUP_MAMMAL, GROUP_BIRD, GROUP_AMPHIBIAN,
          GROUP_REPTILE, GROUP_INSECT]

# IUCN status codes
IUCN_CODES = {
    "CR": "Cực kỳ nguy cấp / Critically Endangered",
    "EN": "Nguy cấp / Endangered",
    "VU": "Sẽ nguy cấp / Vulnerable",
    "NT": "Sắp bị đe doạ / Near Threatened",
    "LC": "Ít quan tâm / Least Concern",
    "DD": "Thiếu dữ liệu / Data Deficient",
    "—": "Chưa đánh giá / Not Evaluated",
}

# Structure: (vietnamese_name, scientific_name, iucn, nd84, range_min_m, range_max_m)
# nd84 = "IB" (Nghiêm cấm), "IIB" (Hạn chế), "—" (Không liệt kê)

SPECIES_DB = {
    GROUP_MAMMAL: [
        # ── Linh trưởng (Primates) ──
        ("Vượn đen tuyền", "Nomascus concolor", "CR", "IB", 500, 2000),
        ("Vượn Cao Vít", "Nomascus nasutus", "CR", "IB", 500, 2000),
        ("Vượn đen má trắng", "Nomascus leucogenys", "CR", "IB", 500, 2000),
        ("Vượn má vàng", "Nomascus gabriellae", "EN", "IB", 500, 2000),
        ("Vượn đen má hung", "Nomascus annamensis", "EN", "IB", 500, 2000),
        ("Chà vá chân nâu", "Pygathrix nemaeus", "EN", "IB", 100, 500),
        ("Chà vá chân đen", "Pygathrix nigripes", "EN", "IB", 100, 500),
        ("Chà vá chân xám", "Pygathrix cinerea", "CR", "IB", 100, 500),
        ("Voọc Hà Tĩnh", "Trachypithecus hatinhensis", "EN", "IB", 100, 300),
        ("Voọc mông trắng", "Trachypithecus delacouri", "CR", "IB", 100, 300),
        ("Voọc mũi hếch", "Rhinopithecus avunculus", "CR", "IB", 100, 500),
        ("Voọc xám", "Trachypithecus phayrei", "EN", "IB", 100, 300),
        ("Khỉ vàng", "Macaca mulatta", "LC", "IIB", 100, 500),
        ("Khỉ đuôi lợn", "Macaca leonina", "VU", "IIB", 100, 500),
        ("Khỉ mặt đỏ", "Macaca arctoides", "VU", "IIB", 100, 400),
        ("Khỉ đuôi dài", "Macaca fascicularis", "VU", "IIB", 100, 400),
        ("Cu li lớn", "Nycticebus bengalensis", "VU", "IB", 20, 100),
        ("Cu li nhỏ", "Nycticebus pygmaeus", "EN", "IB", 20, 80),
        # ── Ăn thịt (Carnivora) ──
        ("Hổ Đông Dương", "Panthera tigris corbetti", "CR", "IB", 200, 1000),
        ("Báo hoa mai", "Panthera pardus", "VU", "IB", 100, 500),
        ("Báo gấm", "Neofelis nebulosa", "VU", "IB", 50, 200),
        ("Mèo rừng", "Prionailurus bengalensis", "LC", "IIB", 30, 150),
        ("Gấu ngựa", "Ursus thibetanus", "VU", "IB", 50, 300),
        ("Gấu chó", "Helarctos malayanus", "VU", "IB", 50, 200),
        ("Cầy vòi mốc", "Arctogalidia trivirgata", "LC", "—", 30, 100),
        ("Cầy hương", "Viverricula indica", "LC", "—", 30, 100),
        ("Cầy giông", "Viverra zibetha", "LC", "IIB", 30, 100),
        ("Chồn bạc", "Melogale personata", "LC", "—", 20, 80),
        ("Rái cá thường", "Lutra lutra", "NT", "IB", 50, 200),
        ("Rái cá vuốt bé", "Aonyx cinereus", "VU", "IIB", 50, 200),
        # ── Guốc chẵn (Artiodactyla) ──
        ("Nai", "Rusa unicolor", "VU", "IIB", 100, 500),
        ("Hoẵng / Mang", "Muntiacus muntjak", "LC", "IIB", 50, 300),
        ("Mang lớn", "Muntiacus vuquangensis", "CR", "IB", 50, 300),
        ("Sao la", "Pseudoryx nghetinhensis", "CR", "IB", 30, 150),
        ("Sơn dương", "Capricornis milneedwardsii", "VU", "IB", 50, 200),
        ("Heo rừng", "Sus scrofa", "LC", "—", 50, 300),
        # ── Khác ──
        ("Tê tê Java", "Manis javanica", "CR", "IB", 10, 50),
        ("Thỏ vằn", "Nesolagus timminsi", "EN", "IB", 20, 80),
        ("Sóc đen", "Ratufa bicolor", "NT", "IIB", 30, 100),
        ("Sóc bay lớn", "Petaurista philippensis", "LC", "IIB", 20, 80),
    ],

    GROUP_BIRD: [
        # ── Gà (Galliformes) ──
        ("Công", "Pavo muticus", "EN", "IB", 300, 1000),
        ("Gà lôi lam mào trắng", "Lophura edwardsi", "CR", "IB", 100, 500),
        ("Gà lôi hông tía", "Lophura diardi", "LC", "IIB", 100, 500),
        ("Gà lôi trắng", "Lophura nycthemera", "LC", "IIB", 100, 400),
        ("Gà tiền mặt vàng", "Polyplectron bicalcaratum", "LC", "IIB", 100, 400),
        ("Gà so ngực gụ", "Arborophila charltoni", "LC", "IIB", 50, 200),
        ("Trĩ sao", "Rheinardia ocellata", "VU", "IB", 200, 800),
        # ── Hồng hoàng (Bucerotiformes) ──
        ("Hồng hoàng", "Buceros bicornis", "VU", "IB", 200, 1000),
        ("Niệc cổ hung", "Aceros nipalensis", "VU", "IB", 200, 800),
        ("Niệc mỏ vằn", "Rhyticeros undulatus", "VU", "IB", 200, 800),
        ("Cao cát bụng trắng", "Garrulax leucolophus", "LC", "—", 100, 400),
        # ── Sẻ (Passeriformes) ──
        ("Khướu bạc má", "Garrulax chinensis", "LC", "—", 100, 300),
        ("Khướu đầu đen", "Garrulax milleti", "VU", "IIB", 100, 300),
        ("Chích chòe lửa", "Copsychus malabaricus", "LC", "—", 100, 300),
        ("Chích chòe than", "Copsychus saularis", "LC", "—", 100, 300),
        ("Yểng", "Gracula religiosa", "LC", "IIB", 100, 500),
        ("Chào mào", "Pycnonotus jocosus", "LC", "—", 50, 200),
        ("Sáo nâu", "Acridotheres tristis", "LC", "—", 50, 200),
        # ── Bồ câu (Columbiformes) ──
        ("Cu gáy", "Streptopelia chinensis", "LC", "—", 100, 500),
        ("Cu xanh", "Treron sp.", "LC", "—", 100, 400),
        ("Cu ngói", "Streptopelia tranquebarica", "LC", "—", 100, 400),
        # ── Cú / Cúc cu (Cuculiformes, Strigiformes) ──
        ("Bìm bịp lớn", "Centropus sinensis", "LC", "—", 100, 500),
        ("Cú mèo lớn", "Bubo nipalensis", "LC", "IIB", 200, 800),
        ("Cú vọ", "Strix leptogrammica", "LC", "IIB", 200, 600),
        ("Cú lợn lưng xám", "Tyto alba", "LC", "—", 100, 300),
        ("Tú hú", "Eudynamys scolopaceus", "LC", "—", 200, 800),
        # ── Vẹt (Psittaciformes) ──
        ("Vẹt ngực đỏ", "Psittacula alexandri", "NT", "IIB", 200, 600),
        ("Vẹt đầu xám", "Psittacula finschii", "NT", "IIB", 200, 600),
        # ── Ưng / Đại bàng (Accipitriformes) ──
        ("Diều hâu", "Accipiter sp.", "LC", "IIB", 200, 800),
        ("Đại bàng đen", "Ictinaetus malaiensis", "LC", "IB", 300, 1000),
        ("Ó cá", "Pandion haliaetus", "LC", "IIB", 200, 600),
        # ── Gõ kiến (Piciformes) ──
        ("Gõ kiến xanh", "Picus sp.", "LC", "—", 100, 400),
        ("Gõ kiến nâu", "Celeus brachyurus", "LC", "—", 100, 400),
        # ── Khác ──
        ("Bói cá", "Halcyon sp.", "LC", "—", 100, 300),
        ("Chim hút mật", "Aethopyga sp.", "LC", "—", 30, 100),
    ],

    GROUP_AMPHIBIAN: [
        ("Ếch cây", "Rhacophorus sp.", "LC", "—", 30, 150),
        ("Ếch gai", "Quasipaa sp.", "VU", "IIB", 20, 100),
        ("Ếch bám đá", "Amolops sp.", "LC", "—", 20, 80),
        ("Ếch suối", "Odorrana sp.", "LC", "—", 20, 100),
        ("Cóc rừng", "Ingerophrynus sp.", "LC", "—", 20, 100),
        ("Cóc mày", "Leptobrachium sp.", "LC", "—", 10, 50),
        ("Nhái bầu", "Microhyla sp.", "LC", "—", 10, 50),
        ("Chẫu chàng", "Polypedates sp.", "LC", "—", 30, 100),
        ("Ếch cây sần", "Theloderma sp.", "LC", "IIB", 20, 80),
    ],

    GROUP_REPTILE: [
        ("Tắc kè", "Gekko gecko", "LC", "IIB", 30, 150),
        ("Thạch sùng", "Hemidactylus sp.", "LC", "—", 10, 30),
        ("Kỳ đà nước", "Varanus salvator", "LC", "IIB", 20, 80),
    ],

    GROUP_INSECT: [
        ("Ve sầu", "Cicadidae", "—", "—", 50, 300),
        ("Dế mèn", "Gryllidae", "—", "—", 20, 100),
        ("Dế trũi", "Gryllotalpidae", "—", "—", 10, 50),
        ("Châu chấu", "Acrididae", "—", "—", 10, 50),
    ],
}


# ── Lookup helpers ──────────────────────────────────────────────

def get_species_by_group(group):
    """Return list of (vn_name, sci_name, iucn, nd84, rmin, rmax)."""
    return SPECIES_DB.get(group, [])


def get_all_species_flat():
    """Return flat list of all species with group prepended."""
    result = []
    for group, species_list in SPECIES_DB.items():
        for sp in species_list:
            result.append((group,) + sp)
    return result


def lookup_species(vn_name):
    """Find species info by Vietnamese name (case-insensitive)."""
    target = vn_name.strip().lower()
    for group, species_list in SPECIES_DB.items():
        for sp in species_list:
            if sp[0].lower() == target:
                return {
                    "group": group,
                    "name_vn": sp[0],
                    "name_sci": sp[1],
                    "iucn": sp[2],
                    "nd84": sp[3],
                    "range_min": sp[4],
                    "range_max": sp[5],
                }
    return None


def get_vn_names_by_group(group):
    """Return list of Vietnamese names for a group (for ComboBox)."""
    return [sp[0] for sp in SPECIES_DB.get(group, [])]


# ── Constant lists for ComboBox widgets ─────────────────────────

HABITATS = [
    "Rừng giàu / Rich forest",
    "Rừng trung bình / Medium forest",
    "Rừng nghèo / Poor forest",
    "Rừng phục hồi / Regenerating forest",
    "Rừng tre nứa / Bamboo forest",
    "Rừng ngập mặn / Mangrove",
    "Trảng cỏ cây bụi / Shrubland",
    "Nương rẫy / Swidden",
    "Ven suối / Riparian",
    "Khác / Other",
]

TERRAINS = [
    "Bằng phẳng / Flat",
    "Sườn dốc / Hillside",
    "Đỉnh / Ridge top",
    "Thung lũng / Valley",
    "Ven suối / Stream bank",
    "Vách đá / Cliff",
    "Khác / Other",
]

WEATHER_CONDITIONS = [
    "Nắng / Sunny",
    "Nhiều mây / Cloudy",
    "Mưa nhỏ / Light rain",
    "Mưa to / Heavy rain",
    "Sương mù / Foggy",
    "Gió mạnh / Windy",
]

WIND_DIRECTIONS = [
    "Lặng gió / Calm",
    "Bắc / N", "Đông Bắc / NE", "Đông / E", "Đông Nam / SE",
    "Nam / S", "Tây Nam / SW", "Tây / W", "Tây Bắc / NW",
]

COUNT_OPTIONS = [
    "1",
    "2–5",
    "6–10",
    ">10",
    "Không rõ / Unknown",
]
