<?php

namespace App\Http\Controllers\Admin;

/*
 * SettingAdminController — настройки сайта в административной панели.
 *
 * Маршруты: GET /admin/settings (форма), POST /admin/settings (сохранение)
 * Хранит: контакты, соцсети, копирайт, слоган, логотипы,
 *         Яндекс.Метрика, Google Analytics, Open Graph.
 * Логотипы/OG-изображение загружаются как файлы, путь сохраняется в settings.
 * После сохранения сбрасывается кеш настроек.
 */

use App\Http\Controllers\Controller;
use App\Models\Setting;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\View\View;

class SettingAdminController extends Controller
{
    private const TEXT_KEYS = [
        // Контакты
        'phone', 'email', 'working_hours',
        // Соцсети
        'telegram', 'youtube', 'vk',
        // Подвал
        'footer_slogan', 'copyright',
        // Аналитика
        'yandex_metrika', 'google_analytics',
        // Open Graph
        'og_site_name', 'og_description', 'og_locale',
        // Режим сайта (хранятся как '1'/'0')
        'site_maintenance', 'site_noindex', 'disable_animations',
    ];

    private const LOGO_KEYS = ['logo_header', 'logo_footer'];

    public function index(): View
    {
        $settings = Setting::all();

        return view('admin.settings.index', compact('settings'));
    }

    public function update(Request $request): RedirectResponse
    {
        $request->validate([
            'phone' => 'nullable|string|max:30',
            'email' => 'nullable|email|max:100',
            'telegram' => 'nullable|url|max:255',
            'youtube' => 'nullable|url|max:255',
            'vk' => 'nullable|url|max:255',
            'footer_slogan' => 'nullable|string|max:255',
            'copyright' => 'nullable|string|max:255',
            'working_hours' => 'nullable|string|max:500',
            // Аналитика
            'yandex_metrika' => 'nullable|digits_between:6,12',
            'google_analytics' => 'nullable|string|max:30',
            // Open Graph
            'og_site_name' => 'nullable|string|max:100',
            'og_description' => 'nullable|string|max:300',
            'og_locale' => 'nullable|string|max:10',
            // Режим сайта
            'site_maintenance' => 'nullable|in:0,1',
            'site_noindex' => 'nullable|in:0,1',
            'disable_animations' => 'nullable|in:0,1',
            // Файлы
            'logo_header' => 'nullable|image|mimes:png,jpg,svg,webp|max:512',
            'logo_footer' => 'nullable|image|mimes:png,jpg,svg,webp|max:512',
            'og_image' => 'nullable|image|mimes:jpg,jpeg,png,webp|max:2048',
        ]);

        // Сохраняем текстовые поля
        foreach (self::TEXT_KEYS as $key) {
            Setting::set($key, $request->input($key));
        }

        // Загружаем логотипы — заменяем файл и сохраняем путь в settings
        foreach (self::LOGO_KEYS as $key) {
            if ($request->hasFile($key) && $request->file($key)->isValid()) {
                $ext = $request->file($key)->getClientOriginalExtension();
                $filename = $key.'.'.$ext;
                $request->file($key)->move(public_path('images/logos'), $filename);
                Setting::set($key, 'images/logos/'.$filename);
            }
        }

        // OG-изображение: 1200×630, сохраняется в public/images/og/
        if ($request->hasFile('og_image') && $request->file('og_image')->isValid()) {
            $ext = $request->file('og_image')->getClientOriginalExtension();
            $request->file('og_image')->move(public_path('images/og'), 'og_image.'.$ext);
            Setting::set('og_image', 'images/og/og_image.'.$ext);
        }

        return redirect()->route('admin.settings.index')
            ->with('success', 'Настройки сохранены.');
    }
}
