# Plugin Settings Requirements

## Purpose
Define implemented setup/settings and diagnostics behavior for the calendar plugin admin pages.

## Scope
This document covers:

- Admin menu structure for plugin management pages
- Setup page controls and persisted settings
- Diagnostics page and diagnostics download behavior

## Admin Navigation
The plugin must provide a single WordPress admin menu entry with these pages:

- Top-level menu: `Calendar Plugin`
- Sub-pages: `Setup`, `Users`, `Diagnostics`
- Access capability: `manage_options`

The top-level duplicate submenu entry should be removed so only the explicit pages appear in navigation.

## Setup Page
The Setup page must support:

- Saving plugin settings
- Seeding default events
- Deleting all event and recurrence-exception data

Setup form controls:

- `CalDAV/ICS Calendar Name` (`caldav_calendar_name`)
- `URL Slug Prefix` (`url_slug`)
- `Verification Page Path` (`verification_page_path`)
- `Plugin Table Prefix` (`table_prefix`)
- `ICS Access Mode` (`ics_access_mode`: `public_read` or `authenticated_read`)
- `Diagnostics Enabled` (`diagnostics_enabled`)
- `Uninstall Cleanup` (`uninstall_cleanup_mode`: `keep` or `remove`)

Behavior requirements:

- Save, seed, and delete-all actions provide success/failure messaging on the Setup page.
- Setup POST actions are nonce-protected.
- `table_prefix` updates rename plugin tables (events, exceptions, users, tokens, audit log) without dropping existing data.
- Prefix changes must fail safely if target tables already exist.
- `url_slug` affects canonical routed paths for ICS and CalDAV endpoints.

## Settings Persistence
- Settings are persisted through plugin options storage and returned by the admin settings API (`/wp-json/calendar/v1/settings`).
- Runtime endpoints and UI links must reflect the latest saved settings.

## Diagnostics Page
The Diagnostics page must be admin-only and show:

- Whether diagnostics are enabled
- Runtime metadata snapshot (generation time, endpoint paths, user context, table stem)
- Recent audit log rows when diagnostics are enabled

Diagnostics download behavior:

- Download action is available only when `diagnostics_enabled=1`
- Download uses a nonce-protected admin-post action
- Response is JSON attachment (`calendar-diagnostics-*.json`)

## Security and Access
- Setup, Users, and Diagnostics pages require `manage_options`.
- Form actions must validate WordPress nonces.
- Inputs must be sanitized/normalized before persistence.
