<?php namespace App\Libs\Composers;

use DefaultTemplateConfiguration;
use Illuminate\Support\Facades\Lang;

trait RelatedComposerTrait
{
    protected function composeRelated($view, $object, $relatedField = 'recommend', $viewVarName = 'relatedObjects')
    {
        if (empty($object)) {
            return;
        }
        $relatedObjects = $object->related($relatedField, 'position',
            array(
                'Project' => array(
                    'standard', 'country', 'technology', 'cobenefits' => function ($query) {
                        $query->full()->select("id", "title", "mesure", "project_id", "cobenefit_id")
                            ->orderBy("website_objects.position")
                            ->take(3)
                            ->with(array(
                                "cobenefit" => function ($query) {
                                    $query->full()
                                        ->select("id", "lang_uri as uri", "title", "lang_slug as slug", "icon_light_id",
                                            'icon_dark_id')
                                        ->with(array("iconLight", "iconDark"));
                                }
                            ));
                    }
                ), 'Solution' => array(
                'overviewImage', 'sustainability_topics' => function ($query) {
                    $query->full()->select("id", "image_id", "color_scheme")
                        ->with("image");
                }
            ), 'CaseStudy' => array('overviewImage'),
                'ContentSnippet' => array('image'),
                'BlogPost' => array('media'),
                'Entry' => array('image'),
                'EventItem' => array('media')
            ));

        $outRelatedObjects = [];
        foreach ($relatedObjects as $object) {
            $wo = $object->websites()->first();
            if ($wo->status !== 'published' || $wo->lang_status !== 'published') {
                continue;
            }
            switch ($object->content_type) {
                case 'content_snippet':
                    //Not supported
                    break;
                case 'project':
                    $new = new \stdClass();
                    $new->title = $object->title;
                    $new->uri = $object->getActiveWebsiteEntry()->lang_uri;
                    $new->image = $object->overviewImage;
                    $new->imageSize = '420x670';
                    $new->type = 'Project';
                    $new->typeLang = Lang::get('frontend.search_type_project');
                    $outRelatedObjects[] = $new;
                    break;
                case 'solution':
                    $new = new \stdClass();
                    $new->title = $object->title;
                    $new->uri = $object->getActiveWebsiteEntry()->lang_uri;
                    $new->image = $object->overviewImage;
                    $new->imageSize = '400x400';
                    $new->type = 'Solution';
                    $new->typeLang = Lang::get('frontend.search_type_solution');
                    $outRelatedObjects[] = $new;
                    break;
                case 'case_study':
                    $new = new \stdClass();
                    $new->title = $object->title;
                    $new->uri = $object->getActiveWebsiteEntry()->lang_uri;
                    $new->image = $object->overviewImage;
                    $new->imageSize = '650x650';
                    $new->type = 'Case Study';
                    $new->typeLang = Lang::get('frontend.search_type_case_study');
                    $outRelatedObjects[] = $new;
                    break;
                case 'news':
                    $new = new \stdClass();
                    $new->title = $object->title;
                    $new->uri = $object->getActiveWebsiteEntry()->lang_uri;
                    $new->image = $object->media;
                    $new->imageSize = '800w';
                    $new->type = 'News';
                    $new->typeLang = Lang::get('frontend.search_type_news');
                    $outRelatedObjects[] = $new;
                    break;
                case 'publication':
                    $new = new \stdClass();
                    $new->title = $object->title;
                    $new->uri = $object->getActiveWebsiteEntry()->lang_uri;
                    $new->image = $object->media;
                    $new->imageSize = '800w';
                    $new->type = 'Publication';
                    $new->typeLang = Lang::get('frontend.search_type_publication_new');
                    $outRelatedObjects[] = $new;
                    break;
                case 'blog_post':
                    $new = new \stdClass();
                    $new->title = $object->title;
                    $new->uri = $object->getActiveWebsiteEntry()->lang_uri;
                    $new->image = $object->media;
                    $new->imageSize = '800w';
                    $new->type = 'Blog';
                    $new->typeLang = Lang::get('frontend.search_type_blog');
                    $outRelatedObjects[] = $new;
                    break;
                case 'page':
                    $new = new \stdClass();
                    $new->title = $object->title;
                    $new->uri = $object->getActiveWebsiteEntry()->lang_uri;
                    $new->image = $object->image;
                    $new->imageSize = '800w';
                    $new->type = '';
                    $new->typeLang = '';
                    $outRelatedObjects[] = $new;
                    break;
                case 'event_item':
                    $new = new \stdClass();
                    $new->title = $object->title;
                    $new->uri = $object->getActiveWebsiteEntry()->lang_uri;
                    $new->image = $object->media;
                    $new->imageSize = '800w';
                    $new->type = 'EventItem';
                    $new->typeLang = Lang::get('frontend.search_type_event_item');
                    $outRelatedObjects[] = $new;
                    break;
                case 'sector':
                    $new = new \stdClass();
                    $new->title = $object->title;
                    $new->uri = $object->getActiveWebsiteEntry()->lang_uri;
                    $new->image = $object->highlightImage;
                    $new->imageSize = '800w';
                    $new->type = 'Sector';
                    $new->typeLang = Lang::get('frontend.search_type_sector');
                    $outRelatedObjects[] = $new;
                    break;
            }
        }

        $view->with(array(
            $viewVarName => $outRelatedObjects
        ));
    }
}

?>
