# Configuration & Parameters

## CLI Flags & Environment Variables

| CLI Flag | Short | Environment Var | Type | Default | Description |
|---|---|---|---|---|---|
| `--url` | `-u` | `URL` / `DEMOS_URL` | string | — | Target URL template (e.g. `https://{theme}.cms.powerofdark.com/{pageURL}`) |
| `--theme` | `-t` | `THEME` | string | `null` | Single theme name (mandatory if URL lacks `{theme}`) |
| `--themes` | | `THEMES` | string | `null` | Comma-separated list of theme slugs (overrides default themes list) |
| `--preset` | `-p` | `PRESET` | string | `store` | Preset name from `presets/` without extension (`.yaml`/`.yml`) |
| `--skip-wp` | | `SKIP_WP` | boolean | `false` | Skips WordPress media upload and theme post update |
| — | — | `WP_EP` | string | — | WordPress REST API endpoint (if empty/missing, WP sync is skipped) |
| — | — | `WP_USERNAME` | string | — | WP REST API username |
| — | — | `WP_PASSWORD` | string | — | WP REST API application password |
| `--help` | `-h` | — | boolean | `false` | Prints CLI usage options and exits |

---

## URL & Theme Validation Matrix

| Target URL has `{theme}`? | `--themes` provided | `--theme` provided | Outcome |
|---|---|---|---|
| **No** | Yes | Any | **Error**: Cannot map multiple themes to a URL without `{theme}` |
| **No** | No | No | **Error**: `--theme <name>` is mandatory to determine screenshot storage directory |
| **No** | No | Yes | **Success**: Uses static URL, stores screenshots under `screenshots/<theme>/` |
| **Yes** | Yes | Any | **Success**: `--theme` skipped, runs for each theme in `--themes` |
| **Yes** | No | Yes | **Success**: Runs for single `[theme]` |
| **Yes** | No | No | **Success**: Runs for default themes array |

---

## Presets (`presets/<name>.yaml`)

Page maps are stored in YAML files under `presets/`. Default preset is `store.yaml`.

```yaml
public:
  <page-key>: "<relative-url>"
private:
  <page-key>: "<relative-url>"
```

### Active Presets
- `presets/store.yaml`: Store preset containing standard public pages and authenticated user panel routes.

---

## Crawler Selectors & Contracts

- **Screenshot Query Flag**: Appends `isScreenshot` query parameter (`?isScreenshot` or `&isScreenshot`).
- **Screenshot Destination**: `screenshots/${theme}/${theme}-${pageName}.png` (`fullPage: true`).
- **Login Route**: `en/login`
- **Login Selectors**:
  - Form: `#page-login`
  - User field: `#page-login [name=Username]` (value: `demo`)
  - Password field: `#page-login [name=Password]` (value: `demo`)
  - Submit button: `#page-login [name=login]`
