# Polish License Plates Anki Generator

Generate Anki flashcards for learning Polish car license plate codes.

## Overview

This package generates Anki-compatible flashcard decks for all Polish vehicle registration plate codes. Each code is mapped to its corresponding location (city or powiat).

Polish license plates use a system where:

- First letter indicates the **voivodeship** (province)
- Following 1-2 letters indicate the specific **city** or **powiat** (county)

## Features

- **444 license plate codes** covering all Polish voivodeships, cities, and powiats
- **Bidirectional flashcards**:
  - Code → Location (e.g., `WY` → `Warszawa Wola`)
  - Location → Code (e.g., `Warszawa Wola` → `WY`)
- **888 total flashcards** for comprehensive learning
- Visual license plate styling in flashcards (yellow background, monospace font)
- Dark mode support
- Self-contained `.apkg` file - no manual setup required

## Data Source

License plate data is automatically extracted from Wikipedia's authoritative table:

- **Source**: [Vehicle registration plates of Poland](https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Poland)
- **Update**: Run `python -m python_pkg.anki_decks.polish_license_plates.fetch_license_plates` to refresh data

This ensures the codes are always based on the most current public information.

## Usage

### Generate Flashcards

```bash
# Generate with default settings
python -m python_pkg.anki_decks.polish_license_plates.polish_license_plates_anki

# Specify custom output file
python -m python_pkg.anki_decks.polish_license_plates.polish_license_plates_anki \
    --output my_plates.apkg

# Use custom deck name
python -m python_pkg.anki_decks.polish_license_plates.polish_license_plates_anki \
    --deck-name "My Polish Plates"
```

### Update License Plate Data

To fetch the latest data from Wikipedia:

```bash
# Use cached data if available (default)
python -m python_pkg.anki_decks.polish_license_plates.fetch_license_plates

# Force refresh from Wikipedia (ignore cache)
python -m python_pkg.anki_decks.polish_license_plates.fetch_license_plates --force
```

**Caching**: Downloaded Wikipedia data is cached for 7 days in `.wikipedia_cache/` to avoid unnecessary requests. Use `--force` to bypass the cache.

This will update `license_plate_data.py` with the current codes from Wikipedia.

**Requirements**: `pip install requests beautifulsoup4 lxml`

### Import into Anki

1. Open Anki
2. File → Import
3. Select the generated `.apkg` file
4. Click Import

## Examples

### License Plate Codes by Voivodeship

| Voivodeship         | First Letter | Example Codes                                    |
| ------------------- | ------------ | ------------------------------------------------ |
| Dolnośląskie        | D            | DA (Wrocław), DB (Wałbrzych), DJ (Jelenia Góra)  |
| Kujawsko-Pomorskie  | C            | CB (Bydgoszcz), CT (Toruń), CG (Grudziądz)       |
| Lubelskie           | L            | LL (Lublin), LC (Chełm), LZ (Zamość)             |
| Lubuskie            | F            | FZ (Zielona Góra), FG (Gorzów Wielkopolski)      |
| Łódzkie             | E            | ED (Łódź), EP (Piotrków Trybunalski)             |
| Małopolskie         | K            | KR (Kraków), KT (Tarnów), KN (Nowy Sącz)         |
| Mazowieckie         | W            | WA-WZ (Warsaw), WR (Radom), WS (Siedlce)         |
| Opolskie            | O            | OP (Opole), OK (Kędzierzyn-Koźle)                |
| Podkarpackie        | R            | RR (Rzeszów), RP (Przemyśl), RK (Krosno)         |
| Podlaskie           | B            | BI (Białystok), BL (Łomża), BSU (Suwałki)        |
| Pomorskie           | G            | GD (Gdańsk), GDY (Gdynia), GS (Słupsk)           |
| Śląskie             | S            | SK (Katowice), SC (Chorzów), SB (Bielsko-Biała)  |
| Świętokrzyskie      | T            | TK (Kielce), TSK (Skarżysko-Kamienna)            |
| Warmińsko-Mazurskie | N            | NO (Olsztyn), NE (Elbląg), NG (Giżycko)          |
| Wielkopolskie       | P            | PO (Poznań), PKA (Kalisz), PIA (Piła)            |
| Zachodniopomorskie  | Z            | ZS (Szczecin), ZKO (Koszalin), ZSW (Świnoujście) |

### Warsaw (Warszawa) Codes

Warsaw has an extensive range of codes (WA-WZ):

- WA: Warszawa (general)
- WB: Warszawa Bemowo
- WC: Ciechanów
- WD: Warszawa Praga Południe
- WE: Warszawa Praga Północ
- WH: Warszawa Mokotów
- WY: Warszawa Wola
- And many more...

## Data

The package includes 444 license plate codes covering:

- All 16 Polish voivodeships
- Major cities with powiat rights (e.g., Kraków, Gdańsk, Poznań)
- All powiats (counties) across Poland

## Testing

Run the test suite:

```bash
python -m pytest python_pkg/polish_license_plates/tests/ -v
```

All 17 tests validate:

- Data integrity (444 codes, no duplicates)
- Correct voivodeship prefixes
- Major cities present
- Anki package generation
- Bidirectional card templates
- CLI functionality

## Technical Details

- **Package format**: Anki `.apkg` (SQLite database)
- **Card model**: Bidirectional with two templates per note
- **Styling**: Custom CSS with license plate visual design
- **Tags**: `geography`, `poland`, `license-plates`, `transportation`

## Requirements

- Python 3.10+
- genanki (for Anki package generation)

## License

Part of the testsAndMisc repository.
