<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\GenericBackoffice\Menu;
use App\Http\Resources\Menu as MenuResource;
use App\Models\Misc;
use App\Models\Notification;
use App\Http\Resources\Misc as MiscResource;
use App\Http\Resources\Notification as NotificationResource;
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
use App\Http\Requests\Api\ContactForm as ContactFormRequest;
use App\Mail\WebsiteContact;
use App\Mail\WebsiteContactUserCopy;
use Carbon\Carbon;
use Mail;
use Config;

class GlobalController extends Controller
{
    /**
     * Gets site global data (menu, languagem, configs, etc)
     *
     * @return \Illuminate\Http\Response
     */
    public function getSiteData()
    {
        $menus = Menu::get();
        $data = [];

        foreach($menus as $menu) {
          $menu->items = $menu->getStructuredItems();
        }

        $misc = Misc::first();

        /**
         * Notifications
         */
        $now = Carbon::now();
        $notifications = Notification::full()
            ->with('icon')
            ->where('status', 'published')
            ->where('start_date', '<=', $now)
            ->where('end_date', '>', $now)
            ->orderBy('end_date', 'asc')
            ->get();

        $data['menus'] = MenuResource::collection($menus);
        $data['languages'] = LaravelLocalization::getSupportedLocales();
        $data['currentLanguage'] = LaravelLocalization::getCurrentLocale();
        $data['misc'] = new MiscResource($misc);
        $data['notifications'] = NotificationResource::collection($notifications);

        return $data;
    }

    public function postContactForm(ContactFormRequest $request)
    {
        $data = $request->validated();

        $to = Config::get('mail.contact_form_to');

        $misc = Misc::first();

        $toEmail = !empty($misc) ? $misc->contact_email : $to['address'];

        if (!empty($data['file'])) {
            $filepath = $data['file']->store('private/contact-uploads');
            $data['filepath'] = $filepath;
            $data['filename'] = $data['file']->getClientOriginalName();
        }

        Mail::to($toEmail)
            ->send(new WebsiteContact($data));

        Mail::to($data['email'])
            ->send(new WebsiteContactUserCopy($data));

        return response()->json(
            ['success' => true]
        );
    }
}
