<?php

namespace App\Http\ViewComposers;

use App\Utilities\Versions;
use App\Traits\Modules;
use Illuminate\View\View;

class Header
{
    use Modules;

    /**
     * Bind data to the view.
     *
     * @param  View  $view
     * @return void
     */
    public function compose(View $view)
    {
        $user = user();

        $invoices = $bills = [];
        $updates = $notifications = 0;
        $company = null;

        if (!empty($user)) {
            // Get customer company
            if ($user->can('read-client-portal')) {
                $company = (object) [
                    'company_name' => setting('company.name'),
                    'company_email' => setting('company.email'),
                    'company_address' => setting('company.address'),
                    'company_logo' => setting('company.logo'),
                ];
            }

            $unreads = $user->unreadNotifications;

            foreach ($unreads as $unread) {
                $data = $unread->getAttribute('data');

                switch ($unread->getAttribute('type')) {
                    case 'App\Notifications\Purchase\Bill':
                        $bills[$data['bill_id']] = $data['amount'];
                        $notifications++;
                        break;
                    case 'App\Notifications\Sale\Invoice':
                        $invoices[$data['invoice_id']] = $data['amount'];
                        $notifications++;
                        break;
                }
            }

            if ($user->can('read-install-updates')) {
                $updates = count(Versions::getUpdates());
            }

            $this->loadSuggestions();
        }

        $view->with([
            'user' => $user,
            'notifications' => $notifications,
            'bills' => $bills,
            'invoices' => $invoices,
            'company' => $company,
            'updates' => $updates,
        ]);
    }
}
