<?php namespace App\Libs\Composers;

use Project;
use Illuminate\Support\Facades\Auth;
use App\Libs\Facades\RequestContext;
use Block;
use FooterContent;

class ProjectsDetailComposer
{
    use ObjectDetailTrait;

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

        $slug = last($parameters);

        $project = Project::full()->where("lang_slug", $slug)
            ->withBlocks()
            ->with(array(
                "cobenefits" => function ($query) {
                    $query->full()->select("project_cobenefits.id", "title", "mesure", "project_id", "cobenefit_id", "cobenefits.sdg_number")
                        ->join('cobenefits', 'project_cobenefits.cobenefit_id', '=', 'cobenefits.id')
                        ->orderBy('sdg_number')
                        ->with(array(
                            "cobenefit" => function ($query) {
                                $query->full()
                                    ->select("id", "lang_uri as uri", "title", "lang_slug as slug", "icon_light_id",
                                        'icon_dark_id', 'icon_id', "sdg_number")
                                    ->with(array("icon", "iconLight", "iconDark"));
                            }
                        ));
                },
                "technology" => function ($query) {
                    $query->full()->select("id", "lang_slug as slug", "lang_uri as uri", "title");
                },
                "standard" => function ($query) {
                    $query->full()
                        ->select("id", "lang_slug as slug", "lang_uri as uri", "title", "logo_image_id")
                        ->with("logoImage");
                },
                "brochure" => function($query) {
                    $query->full();
                },
                "projectImages" => function($query) {
                    $query->full()->orderBy('website_objects.position')->orderBy('website_objects.website_object_id');
                }
            ))
            ->first();

        $this->checkIsPublished($project, $data['isPreview']);

        $hasBar = false;
        foreach ($project->blocks as $block) {
            if ($block->type === 'project-ph-share-bar') {
                $hasBar = true;
                break;
            }
        }

        foreach ($project->blocks as $key => $block) {
            if ($block->slug === 'project-ph-sdgs' && !Auth::guard('admin')->user()) {
                unset($project->blocks[$key]);

                $blockTemp = Block::full()
                    ->where('website_objects.slug', 'sdg-replacement-block---master')
                    ->first();
                if (!empty($blockTemp)) {
                    $project->blocks->splice($key, 0, [$blockTemp]);
                }

                break;
            }
        }

        $codeEmbeds = $project->related('codeEmbeds');

        $metaData = new \stdClass();
        if (!empty($project->meta_title)) {
            $metaData->meta_title = $project->meta_title;
        } else {
            $metaData->meta_title = cut_string(strip_tags($project->title), 100);
        }
        if (!empty($project->meta_description)) {
            $metaData->meta_description = $project->meta_description;
        } else {
            $metaData->meta_description = cut_string(strip_tags($project->objective), 200);
        }
        if ($project->cf_no_index || !$project->is_hero) {
            $metaData->no_index = true;
        }
        $metaData->meta_keywords = $project->meta_keywords;
        if ($project->overviewImage) {
            $metaData->metaImage = getMediaUrl($project->overviewImage->filename, '340x300');
        }

        $footerContent = FooterContent::full()->first();

        $view->with(array(
            'project' => $project,
            'objectEmbeds' => $codeEmbeds,
            'metaData' => $metaData,
            'hasBar' => $hasBar,
            'footerContent' => $footerContent,
            'breadcrumbs' => $this->addBreadcrumb($project, $data['breadcrumbs'] ?? []),
        ));
    }
}
