# Theme System Guide

## Theme Architecture

- `themes` table central registry hai.
- `theme_modules` table batati hai ke har theme ke kaun se blade modules hain.
- `theme_settings` tenant dynamic DB mein active theme ka branding/config store karti hai.
- `tenant_module_settings` tenant dynamic DB mein module enable/disable aur order store karti hai.

## Runtime Flow

1. User tenant project connect karta hai.
2. `ThemeManager` active tenant resolve karta hai.
3. Active theme aur tenant module settings load hoti hain.
4. Frontend tenant domain layout `resources/views/layouts/tenant-domain/base.blade.php` theme modules ko dynamic tareeqe se render karta hai.

## Important Separation

- Admin panel ka layout `resources/views/layouts/demo10/base.blade.php` hai.
- Is admin layout par theme modules apply nahi honi chahiye.
- Frontend / tenant-facing domain ke liye alag themed layout use karein:

  `resources/views/layouts/tenant-domain/base.blade.php`

## Supported Module Keys

- `header`
- `sidebar`
- `topbar`
- `hero`
- `content`
- `footer`

## New Theme Banane Ka Tareeqa

1. `themes` table mein new record add karein.
2. `theme_modules` mein har module key ka `blade_view` save karein.
3. Theme folder banayein:

  `resources/views/theme/<theme-slug>/modules/`

4. In files ko create karein:

   - `header.blade.php`
   - `sidebar.blade.php`
   - `topbar.blade.php`
   - `hero.blade.php`
   - `content.blade.php`
   - `footer.blade.php`

5. `content.blade.php` ke andar page body render karne ke liye `{!! $slot ?? '' !!}` use karein.

## Important Variables Available In Theme Blades

- `$themeSettings`
- `$activeTheme`
- `$themeModuleSettings`
- `session('tenant_slug')`

## Seed / Sync Commands

- Central themes seed:

  `php artisan db:seed --class=ThemeSeeder`

- Tenant theme tables and default module sync:

  `php artisan theme:migrate-tenants --tenant=2`

## Existing Theme Folders

- `resources/views/theme/default/`
- `resources/views/theme/pmis/`
- `resources/views/theme/wmc/`
- `resources/views/theme/shared/modules/` (runtime shared header/footer/content wrappers)

## Frontend Tenant Domain Use

Jis frontend page ya domain par theme apply karni ho us view ko is layout se extend karein:

`@extends('layouts.tenant-domain.base')`

Admin pages ke liye hamesha demo10 ya existing admin layouts hi use karein.

## Multiple Pages Kaise Banayein

1. Har naya tenant-facing page ko `@extends('layouts.tenant-domain.base')` ke sath create karein.
2. Page route ko tenant context ke andar define karein (tenant session required).
3. Agar page ka apna data table chahiye, pehle page/table builder se table banayein.
4. Phir page controller mein `DB::connection('dynamic')->table('<table_name>')` use karke data read/write karein.

## Form-Based Tenant Table Builder

- UI route: `GET /themes/pages/builder`
- Submit route: `POST /themes/pages/builder`
- Ye feature tenant dynamic DB mein:
  - actual data table create karta hai (aapke diye hue columns ke sath)
  - `tenant_dynamic_pages` mein page metadata save karta hai
  - `tenant_dynamic_page_columns` mein column schema save karta hai

## Existing Tenant Metadata Tables

- `tenant_dynamic_pages`
- `tenant_dynamic_page_columns`

Ye tables command se bhi ensure ho sakti hain:

`php artisan theme:migrate-tenants --tenant=2`
