=== Frederix External Login ===
Contributors: frederixhotspot
Tags: login, hotspot, external login, wifi
Requires at least: 5.0
Tested up to: 6.9
Stable tag: 1.1.0
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html

Handles the external login flow for CloudWiFi, including success and error pages.

== Description ==

This plugin allows any WordPress page to act as an External Login page for CloudWiFi.

It handles the entire flow:
1.  **Login**: Displays a login button that redirects the user back to the hotspot.
2.  **Success**: Displays a success message after authorization.
3.  **Error**: Displays detailed error messages if the login fails (e.g., timeout, license exceeded).

**Features:**
*   **One Shortcode**: Use `[frederix_external_login]` for everything.
*   **Automatic Mode**: Automatically detects if it should show the Login button, Success message, or Error message based on the URL parameters.
*   **Flexible Configuration**: Use different pages for Login/Success/Error if desired.
*   **Customizable Messages**: Change the button text and messages via shortcode attributes.
*   **Secure**: Validates and sanitizes all inputs.

== Installation ==

1.  Upload the `frederix-external-login` folder to the `/wp-content/plugins/` directory.
2.  Activate the plugin through the 'Plugins' menu in WordPress.
3.  Create a new page (e.g., "WiFi Login").
4.  Add the shortcode `[frederix_external_login]` to the page content.
5.  Configure your Hotspot's **External Login URL**, **Success URL**, and **Error URL** to point to this page.

== Shortcode Options ==

You can customize the shortcode with the following attributes:

*   **`mode`**: Controls what the shortcode displays.
    *   `auto` (default): Automatically switches based on URL status (`status=success` or `status=error`).
    *   `login`: Forces the display of the login button.
    *   `success`: Forces the display of the success message.
    *   `error`: Forces the display of the error message.
*   **`text`**: The text on the login button. Default: "Login & Connect".
*   **`success_message`**: The message shown on success. Default: "You are now logged in..."
*   **`error_message`**: The fallback error message. Default: "An unknown error occurred."
*   **`tos_url`**: (Mandatory for Login) URL to your Terms of Service page.
*   **`privacy_url`**: (Mandatory for Login) URL to your Privacy Policy page.


### Examples

**Standard Setup (One Page for everything):**
`[frederix_external_login tos_url="/agb" privacy_url="/datenschutz"]`

**Custom Button Text:**
`[frederix_external_login text="Start Free WiFi" tos_url="/agb" privacy_url="/datenschutz"]`

**Separate Error Page:**
If you want a dedicated error page with a custom message:
`[frederix_external_login mode="error" error_message="Something went wrong. Please ask at the reception."]`


== Dynamic Styling ==

The plugin automatically adds CSS classes to the main container based on the Hotspot parameters. This allows you to style the page differently for each location.

**Classes added:**
*   `fhk-hotspot-{hotspotId}`
*   `fhk-location-{locationId}`
*   `fhk-external-{externalId}`

**Example CSS:**
If you want a green button for Location 123 and a blue button for Location 456:

```css
/* Location 123 - Green */
.fhk-location-123 .frederix-login-button {
    background-color: green;
}

/* Location 456 - Blue */
.fhk-location-456 .frederix-login-button {
    background-color: blue;
}
```

== Conditional Content ==

You can show or hide any content (images, text, other shortcodes) based on the location or hotspot ID using the `[frederix_show_if]` shortcode.

**Attributes:**
*   `location`: Comma-separated list of Location IDs.
*   `hotspot`: Comma-separated list of Hotspot IDs.
*   `external`: Comma-separated list of External IDs.

**Example 1: Show a specific logo only for Location 123:**

```text
[frederix_show_if location="123"]
<img src="https://example.com/logo-location-123.png" alt="Location 123 Logo">
[/frederix_show_if]
```

**Example 2: Show a special notice for multiple Hotspots:**

```text
[frederix_show_if hotspot="HS-01, HS-02"]
<div class="notice">
    <p>Special maintenance today in this area!</p>
</div>
[/frederix_show_if]
```

**Example 3: Combine with the login shortcode:**

```text
[frederix_show_if location="123"]
    <h2>Welcome to the Beach Club!</h2>
    [frederix_external_login text="Connect to Beach WiFi"]
[/frederix_show_if]

[frederix_show_if location="456"]
    <h2>Welcome to the Lobby!</h2>
    [frederix_external_login text="Connect to Lobby WiFi"]
[/frederix_show_if]
```


== Frequently Asked Questions ==

= How do I test this? =
You need a running Frederix Hotspot that redirects to your WordPress page. The hotspot will append parameters like `?callback=...` or `?status=success`.

= Can I style the button? =
Yes, the plugin includes basic CSS, but you can override `.frederix-login-button` in your theme's CSS.

== Changelog ==

= 1.1.0 =
*   Added support for Success and Error states.
*   Added `mode` attribute for manual control.
*   Added customizable messages.

= 1.0.0 =
*   Initial release.
