# Site-Specifika Parsers

Denna mapp innehåller parsers för olika receptsidor. Varje webbplats kan ha sina egna selectors och datastrukturer.

## Arkitektur

- **`base.parser.ts`** – Bas-klass som alla parsers extendar
- **`ica.parser.ts`** – Optimerad parser för ica.se
- **`generic.parser.ts`** – Generisk fallback-parser för okända sidor

## Så lägger du till en ny parser

1. Skapa en ny fil, t.ex. `mathem.parser.ts`:

```typescript
import { RecipeParser, ParsedRecipe } from './base.parser';

export class MathemsRecipeParser extends RecipeParser {
  canHandle(url: string): boolean {
    return /mathem\.se/i.test(url); // Matchar bara mathem.se-URLs
  }

  parse(html: string): ParsedRecipe {
    // Din site-specifika parsing-logik här
    // Returnera { name, ingredients, instructions }
  }
}
```

2. Registrera parsern i `quick-import.service.ts`:

```typescript
const parsers: RecipeParser[] = [
  new IcaRecipeParser(),
  new MathemsRecipeParser(), // Din nya parser här
  new GenericRecipeParser(), // Måste vara sist (fallback)
];
```

## Bästa praxis

- **I18n**: Använd svenska användarmeddelanden
- **Säkerhet**: Sanitera HTML-output innan du använder det
- **Robustness**: Testa edge-cases (tomma ingredienser, långa instruktioner)
- **Prioritering**: Mer specifika parsers måste komma före generiska

## Tips för att debugga en ny sida

1. Kolla om sidan använder JSON-LD: Öppna DevTools → Sök efter `<script type="application/ld+json">`
2. Om JSON-LD finns → kopiera strukturen och anpassa `parseIngredientLine()`
3. Om inte → analysera HTML-strukturen och justera CSS-selectors

## Framtida förbättringar

- [ ] Stöd för Puppeteer/Playwright för JavaScript-heavy webbplatser
- [ ] Plugin-system för community-bidrag
- [ ] Tester per parser
