<?php namespace App\Libs\Composers\CF;

use App\Libs\Composers\BarComposerTrait;
use App\Libs\Composers\SidebarComposerTrait;
use CfCaseStudy;

class CfCaseStudyComposer
{
    use SidebarComposerTrait,
        BarComposerTrait,
        CfRelatedComposerTrait;

    public function compose($view)
    {
        $data = $view->getData();
        $parameters = $data['parameters'];
        $slug = last($parameters);

        $caseStudy = CfCaseStudy::full()->with(array(
            'slides' => function ($q) {
                $q->full()->with('image')->orderBy("website_objects.position", "asc");
            }, 'codeEmbeds'
        ))
            ->where("website_objects.slug", $slug)
            ->first();

        if (!$caseStudy) {
            abort(404);
        }

        if ($caseStudy->status != 'published') {
            $user = \Auth::guard('admin')->user();
            if (!$user) {
                abort(404);
            }
        }

        $this->composeObjectSidebar($view, $caseStudy, 'sidebarWidgets');
        $this->composeBars($view, $caseStudy);
        $this->composeRelated($view, $caseStudy);

        $count = CfCaseStudy::full()->where("status", "published")->count();

        $position = CfCaseStudy::full()
            ->where("status", "published")
            ->where("title", "<", $caseStudy->title)
            ->orderBy('title', 'desc')
            ->count();
        $next = CfCaseStudy::full()
            ->where("status", "published")
            ->where("title", ">", $caseStudy->title)
            ->orderBy('title', 'asc')
            ->take(1)
            ->first();
        $previous = CfCaseStudy::full()
            ->where("status", "published")
            ->where("title", "<", $caseStudy->title)
            ->orderBy('title', 'desc')
            ->take(1)
            ->first();

        $navigator = array(
            'total' => $count,
            'position' => ($position + 1),
            'next' => $next,
            'previous' => $previous
        );

        $metaData = new \stdClass();
        if ($caseStudy->meta_title) {
            $metaData->meta_title = $caseStudy->meta_title;
        } else {
            $metaData->meta_title = cut_string(strip_tags($caseStudy->title), 100);
        }
        if ($caseStudy->meta_description) {
            $metaData->meta_description = $caseStudy->meta_description;
        } else {
            $metaData->meta_description = cut_string(strip_tags($caseStudy->summary), 200);
        }
        $metaData->meta_keywords = $caseStudy->meta_keywords;
        if ($caseStudy->overviewImage) {
            $metaData->metaImage = getMediaUrl($caseStudy->overviewImage->filename, '420x260');
        }

        $view->with(array(
            'slides' => $caseStudy->slides,
            'caseStudy' => $caseStudy,
            'navigator' => $navigator,
            'metaData' => $metaData
        ));
    }
}
