<?php
namespace App\Http\Controllers\Api;

use App\Http\Controllers\ApiBaseController;
use App\Models\SelfConfiguration;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class SelfConfigurationController extends ApiBaseController {
    public function getSettings(string $group)
    {
        $companyId = company()->id;
        // Configuration definitions (can be moved to config file)
        $configMap = [
            'self_menus' => [
                [
                    'key' => 'show_assets',
                    'label' => 'Assets',
                    'description' => 'Show assets menu in self section',
                ],
                [
                    'key' => 'show_holidays',
                    'label' => 'Holidays',
                    'description' => 'Show holidays menu in self section',
                ],
                [
                    'key' => 'show_appreciations',
                    'label' => 'Appreciations',
                    'description' => 'Show appreciations menu in self section',
                ],
                [
                    'key' => 'show_leaves',
                    'label' => 'Leaves',
                    'description' => 'Show leaves menu in self section',
                ],
                [
                    'key' => 'show_attendances',
                    'label' => 'Attendances',
                    'description' => 'Show attendances menu in self section',
                ],
                [
                    'key' => 'show_news',
                    'label' => 'News',
                    'description' => 'Show news menu in self section',
                ],
                [
                    'key' => 'show_offboardings',
                    'label' => 'Offboardings',
                    'description' => 'Show offboardings menu in self section',
                ],
                [
                    'key' => 'show_letter_heads',
                    'label' => 'Letter Heads',
                    'description' => 'Show letter heads menu in self section',
                ],
                [
                    'key' => 'show_expenses',
                    'label' => 'Expenses',
                    'description' => 'Show expenses menu in self section',
                ],
                [
                    'key' => 'show_payrolls',
                    'label' => 'Payrolls',
                    'description' => 'Show payrolls menu in self section',
                ],
                [
                    'key' => 'show_company_policies',
                    'label' => 'Company Policies',
                    'description' => 'Show company policies menu in self section',
                ],
                [
                    'key' => 'show_assigned_survey',
                    'label' => 'Assigned Survey',
                    'description' => 'Show assigned survey menu in self section',
                ],
                [
                    'key' => 'show_profile',
                    'label' => 'Profile',
                    'description' => 'Show profile menu in self section',
                ],
            ],
            'payroll' => [
                [
                    'key' => 'has_letter_heads',
                    'label' => 'Letter Heads',
                    'description' => 'Enable letter head templates',
                ],
                [
                    'key' => 'has_resignations',
                    'label' => 'Resignations',
                ],
                [
                    'key' => 'has_warnings',
                    'label' => 'Warnings',
                ],
                [
                    'key' => 'has_complaints',
                    'label' => 'Complaints',
                ],
                [
                    'key' => 'has_expenses',
                    'label' => 'Expenses',
                ],
                [
                    'key' => 'has_news',
                    'label' => 'News',
                ],
            ],
        ];

        if (!isset($configMap[$group])) {
            return response()->json([
                'message' => 'Invalid settings group',
            ], 404);
        }

        // Load saved values
        $values = SelfConfiguration::group($group)
            ->company($companyId)
            ->pluck('config_value', 'config_key');

        return response()->json([
            'config' => $configMap[$group],
            'values' => $values,
        ]);
    }

    /**
     * POST /api/settings/{group}
     */
    public function saveSettings(Request $request, string $group)
    {
        $companyId = company()->id ?? null;

        DB::transaction(function () use ($request, $group, $companyId) {
            foreach ($request->all() as $key => $value) {
                SelfConfiguration::setValue(
                    $group,
                    $key,
                    (int) $value,
                    $companyId
                );
            }
        });

        return response()->json([
            'message' => 'Settings saved successfully',
        ]);
    }

    /**
     * GET /api/settings/self_menus - Accessible to all authenticated users
     */
    public function getSelfMenus()
    {
        return $this->getSettings('self_menus');
    }

    /**
     * POST /api/settings/self_menus - Accessible to all authenticated users
     */
    public function storeSelfMenus(Request $request)
    {
        return $this->saveSettings($request, 'self_menus');
    }
}