<?php
declare(strict_types=1);

require_once __DIR__ . '/../includes/layout.php';
require_once __DIR__ . '/../includes/service_management.php';

require_permission($conn, 'services');

$serviceGroupEditId = filter_input(INPUT_GET, 'service_group_id', FILTER_VALIDATE_INT);
$editingGroup = null;

if ($serviceGroupEditId) {
    $groupEditStmt = db_prepare($conn, "
        SELECT group_id, category_id, main_service_id, group_name, show_window_film_details
        FROM service_groups
        WHERE group_id = ?
        LIMIT 1
    ");
    $groupEditStmt->bind_param('i', $serviceGroupEditId);
    $groupEditStmt->execute();
    $editingGroup = $groupEditStmt->get_result()->fetch_assoc();
    $groupEditStmt->close();
}

$oldInput = pull_old_input();
$categories = service_categories($conn);
$mainServices = service_main_service_options($conn);
$groupStats = service_group_options($conn);

$defaultCategoryId = $editingGroup
    ? (int) ($editingGroup['category_id'] ?? 0)
    : (isset($categories[0]) ? (int) ($categories[0]['category_id'] ?? 0) : 0);
$defaultMainServiceId = 0;
foreach ($mainServices as $mainService) {
    if ((int) ($mainService['category_id'] ?? 0) === $defaultCategoryId) {
        $defaultMainServiceId = (int) ($mainService['service_id'] ?? 0);
        break;
    }
}
if ($defaultMainServiceId === 0 && isset($mainServices[0])) {
    $defaultMainServiceId = (int) ($mainServices[0]['service_id'] ?? 0);
}

$groupCategoryDefaultId = $editingGroup ? (int) ($editingGroup['category_id'] ?? 0) : $defaultCategoryId;
$groupCategoryIdValue = (int) old_value($oldInput, 'group_category_id', (string) $groupCategoryDefaultId);
$groupMainServiceIdValue = (int) old_value($oldInput, 'group_main_service_id', (string) ($editingGroup['main_service_id'] ?? $defaultMainServiceId));
$groupName = old_value($oldInput, 'group_name', (string) ($editingGroup['group_name'] ?? ''));
$showWindowFilmDetails = old_value($oldInput, 'show_window_film_details', (string) ($editingGroup['show_window_film_details'] ?? '0')) === '1';

$formReturnTo = service_management_page_url('service_groups.php', $editingGroup ? array('service_group_id' => (int) $editingGroup['group_id']) : array());

$pageTitle = ui_text('กลุ่มบริการ', 'Service Groups');
$pageHeading = ui_text('รายการกลุ่มบริการ', 'Service group list');
$pageDescription = ui_text(
    'จัดการกลุ่มบริการเสริมภายใต้บริการหลัก เช่น แบรนด์ฟิล์มหรือชุดตัวเลือกที่จัดเป็นกลุ่มเดียวกัน',
    'Manage optional service groups under each main service, such as film brands or other grouped variants.'
);
$manageSystemLabel = ui_text('จัดการระบบ', 'Manage System');
$createBookingLabel = ui_text('เปิดบิล', 'Create booking');
$formTitle = $editingGroup
    ? ui_text('แก้ไขกลุ่มบริการ', 'Edit service group')
    : ui_text('เพิ่มกลุ่มบริการ', 'Add service group');
$formHelperLabel = ui_text(
    'กลุ่มบริการคือชั้นกลางเพิ่มเติมใต้บริการหลัก เช่น แบรนด์ฟิล์มอย่าง V-Kool หรือ 3M',
    'A service group is an optional middle layer under a main service, such as film brands like V-Kool or 3M.'
);
$resetFormLabel = ui_text('เพิ่มกลุ่มบริการ', 'Add service group');
$categoryLabel = ui_text('หมวดหมู่', 'Category');
$selectCategoryLabel = ui_text('เลือกหมวดหมู่', 'Select category');
$parentMainServiceLabel = ui_text('บริการหลักแม่', 'Parent main service');
$selectMainServiceLabel = ui_text('เลือกบริการหลัก', 'Select main service');
$groupNameLabel = ui_text('ชื่อกลุ่มบริการ', 'Group name');
$showWindowFilmDetailsLabel = ui_text('แสดงรายละเอียดฟิล์มกรองแสง', 'Show window film details');
$showWindowFilmDetailsHelperLabel = ui_text(
    'เมื่อเปิดใช้ กลุ่มนี้จะควบคุมแผงรายละเอียดฟิล์มกรองแสง และทำให้บริการย่อยเลือกแยกตามตำแหน่งกระจกได้',
    'When enabled, this group drives the window film detail panel and its sub-services become selectable per glass position.'
);
$saveServiceGroupLabel = $editingGroup
    ? ui_text('บันทึกกลุ่มบริการ', 'Save service group')
    : ui_text('เพิ่มกลุ่มบริการ', 'Add service group');
$recordsLabel = ui_text('รายการ', 'record(s)');
$emptyStateLabel = ui_text('ยังไม่พบกลุ่มบริการ', 'No service groups found.');
$mainServiceLabel = ui_text('บริการหลัก', 'Main service');
$groupLabel = ui_text('กลุ่ม', 'Group');
$windowFilmDetailsLabel = ui_text('รายละเอียดฟิล์ม', 'Window film details');
$showLabel = ui_text('แสดง', 'Show');
$hideLabel = ui_text('ซ่อน', 'Hide');
$itemsLabel = ui_text('รายการย่อย', 'Items');
$actionLabel = ui_text('การทำรายการ', 'Action');
$editLabel = ui_text('แก้ไข', 'Edit');
$deleteLabel = ui_text('ลบ', 'Delete');
$deleteGroupConfirmLabel = ui_text('ลบกลุ่มบริการนี้ใช่หรือไม่', 'Delete this service group?');
$inUseLabel = ui_text('กำลังถูกใช้งาน', 'In use');

render_page_start($pageTitle, 'service_groups', array('translation_buffer' => false));
?>

<section class="page-hero">
    <div>
        <h1><?= e($pageHeading) ?></h1>
        <p><?= e($pageDescription) ?></p>
    </div>
    <div class="hero-actions">
        <a class="button button-secondary" href="manage_system.php"><?= e($manageSystemLabel) ?></a>
        <a class="button button-secondary" href="booking.php"><?= e($createBookingLabel) ?></a>
    </div>
</section>

<?= render_service_management_tabs('service_groups') ?>

<div class="grid">
    <section class="form-card" id="service-group-form">
        <div class="section-head">
            <div>
                <h2 class="section-title"><?= e($formTitle) ?></h2>
                <p class="helper"><?= e($formHelperLabel) ?></p>
            </div>
            <?php if ($editingGroup): ?>
                <a class="button button-ghost" href="service_groups.php"><?= e($resetFormLabel) ?></a>
            <?php endif; ?>
        </div>

        <form method="POST" action="../process/save_service_group.php" data-service-group-form>
            <input type="hidden" name="return_to" value="<?= e($formReturnTo) ?>">
            <?php if ($editingGroup): ?>
                <input type="hidden" name="service_group_id" value="<?= (int) $editingGroup['group_id'] ?>">
            <?php endif; ?>

            <div class="form-grid">
                <div class="field">
                    <label for="group_category_id"><?= e($categoryLabel) ?></label>
                    <select id="group_category_id" name="group_category_id" data-service-category-select required>
                        <option value=""><?= e($selectCategoryLabel) ?></option>
                        <?php foreach ($categories as $category): ?>
                            <option value="<?= (int) $category['category_id'] ?>" <?= $groupCategoryIdValue === (int) $category['category_id'] ? 'selected' : '' ?>>
                                <?= e((string) $category['category_name']) ?>
                            </option>
                        <?php endforeach; ?>
                    </select>
                </div>

                <div class="field">
                    <label for="group_main_service_id"><?= e($parentMainServiceLabel) ?></label>
                    <select id="group_main_service_id" name="group_main_service_id" data-service-main-select required>
                        <option value=""><?= e($selectMainServiceLabel) ?></option>
                        <?php foreach ($mainServices as $mainService): ?>
                            <option
                                value="<?= (int) $mainService['service_id'] ?>"
                                data-category-id="<?= (int) $mainService['category_id'] ?>"
                                <?= $groupMainServiceIdValue === (int) $mainService['service_id'] ? 'selected' : '' ?>
                            >
                                <?= e((string) $mainService['category_name']) ?> / <?= e((string) $mainService['service_name']) ?>
                            </option>
                        <?php endforeach; ?>
                    </select>
                </div>

                <div class="field">
                    <label for="group_name"><?= e($groupNameLabel) ?></label>
                    <input id="group_name" name="group_name" type="text" value="<?= e($groupName) ?>" required>
                </div>
            </div>

            <label class="service-option compact-option">
                <input type="checkbox" name="show_window_film_details" value="1" <?= $showWindowFilmDetails ? 'checked' : '' ?>>
                <span>
                    <strong><?= e($showWindowFilmDetailsLabel) ?></strong>
                    <span class="muted"><?= e($showWindowFilmDetailsHelperLabel) ?></span>
                </span>
            </label>

            <button class="button button-accent" type="submit"><?= e($saveServiceGroupLabel) ?></button>
        </form>
    </section>
</div>

<section class="table-card" style="margin-top: 18px;">
    <div class="section-head" style="padding: 18px 18px 0;">
        <div>
            <h2 class="section-title"><?= e($pageHeading) ?></h2>
            <p class="helper"><?= count($groupStats) ?> <?= e($recordsLabel) ?></p>
        </div>
    </div>

    <?php if (empty($groupStats)): ?>
        <div class="empty-state" style="margin: 18px;"><?= e($emptyStateLabel) ?></div>
    <?php else: ?>
        <table style="min-width: 520px;">
            <thead>
            <tr>
                <th><?= e($categoryLabel) ?></th>
                <th><?= e($mainServiceLabel) ?></th>
                <th><?= e($groupLabel) ?></th>
                <th><?= e($windowFilmDetailsLabel) ?></th>
                <th><?= e($itemsLabel) ?></th>
                <th><?= e($actionLabel) ?></th>
            </tr>
            </thead>
            <tbody>
            <?php foreach ($groupStats as $serviceGroup): ?>
                <tr>
                    <td><?= e((string) $serviceGroup['category_name']) ?></td>
                    <td><?= e((string) ($serviceGroup['main_service_name'] ?: '-')) ?></td>
                    <td><strong><?= e((string) $serviceGroup['group_name']) ?></strong></td>
                    <td><?= (int) ($serviceGroup['show_window_film_details'] ?? 0) === 1 ? e($showLabel) : e($hideLabel) ?></td>
                    <td><?= (int) ($serviceGroup['service_count'] ?? 0) ?></td>
                    <td>
                        <div class="inline-actions">
                            <a class="button button-secondary" href="<?= e(service_management_page_url('service_groups.php', array('service_group_id' => (int) $serviceGroup['group_id']))) ?>"><?= e($editLabel) ?></a>
                            <?php if ((int) ($serviceGroup['service_count'] ?? 0) === 0): ?>
                                <form class="inline-form" method="POST" action="../process/delete_service_group.php" onsubmit="return confirm('<?= e($deleteGroupConfirmLabel) ?>');">
                                    <input type="hidden" name="service_group_id" value="<?= (int) $serviceGroup['group_id'] ?>">
                                    <input type="hidden" name="return_to" value="service_groups.php">
                                    <button class="button button-danger" type="submit"><?= e($deleteLabel) ?></button>
                                </form>
                            <?php else: ?>
                                <span class="muted"><?= e($inUseLabel) ?></span>
                            <?php endif; ?>
                        </div>
                    </td>
                </tr>
            <?php endforeach; ?>
            </tbody>
        </table>
    <?php endif; ?>
</section>

<?php render_page_end(); ?>
