# MauiProgram

**Namespace:** `FrymasterBadgeApp`  
**Type:** `static class`  
**Purpose:** MAUI application bootstrap. Handles dependency injection setup, configuration loading, font registration, and service factory creation.

## 📦 Methods

### `CreateMauiApp()`
- **Access:** `public static`
- **Returns:** `MauiApp`
- **Behavior:**
  1. Logs startup.
  2. Initializes `MauiAppBuilder`, enables `CommunityToolkit`, and sets fonts (`OpenSans`, `BarcodeFont`).
  3. Calls `LoadConfiguration(builder)`.
  4. Registers services:
     - `SqlService`: Factory-resolves connection string from `IConfiguration`. Falls back to hardcoded `Server=127.0.0.1...` if missing. Logs warning.
     - `PrinterService`: Singleton.
     - `AppShell`: Singleton.
     - `EmployeePage`, `CompanyPage`, `SettingsPage`: Transient.
  5. Enables debug logging in `DEBUG` builds.
  6. Builds and returns `MauiApp`.

### `LoadConfiguration(MauiAppBuilder builder)`
- **Access:** `private static`
- **Behavior:** Configuration fallback chain:
  1. **Primary:** Loads `appsettings.json` via `FileSystem.OpenAppPackageFileAsync()`. Parses and injects into builder.
  2. **Fallback 1:** If file system fails, attempts `Assembly.GetManifestResourceStream("FrymasterBadgeApp.Resources.Raw.appsettings.json")`.
  3. **Fallback 2:** If both fail, silently returns (triggers `SqlService` hardcoded fallback).
  4. Logs success or warnings at each stage.

---
**💡 Developer Notes:**
- ⚠️ **Security Warning:** Hardcoded fallback connection string (`User Id=sa;Password=YourPassword123;`) should be removed or masked before production deployment.
- Configuration loading gracefully degrades, preventing app crashes on missing config files.
- Service lifetimes are appropriately scoped (Singleton for app-wide services, Transient for UI pages).