<?php

namespace App\Console\Commands;

use App\Developer;
use App\ResidentialComplex;
use App\SeoContent;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Spatie\Sitemap\Sitemap;
use Spatie\Sitemap\Tags\Url;

class SitemapGenerate extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'sitemap:generate';
    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';
    /**
     * @var Sitemap
     */
    protected $sitemap;

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $this->sitemap = Sitemap::create();
        $this->developer();
        $this->residentialComplex();
        $this->pages();
        $this->sitemap->writeToFile(public_path('sitemap.xml'));
    }

    protected function developer()
    {
        foreach (Developer::query()->where('enabled', 1)->get() as $developer) {
            $this->sitemap->add(Url::create($urlFront = env('URL_FRONT') . "/developer/" . $developer->code)->setLastModificationDate(Carbon::yesterday())->setChangeFrequency(Url::CHANGE_FREQUENCY_DAILY)->setPriority(1));
        }
    }

    protected function residentialComplex()
    {
        foreach (ResidentialComplex::query()->where('enabled', 1)->get() as $residentialComplex) {
            $this->sitemap->add(Url::create(env('URL_FRONT') . "/residential-complex/" . $residentialComplex->code)->setLastModificationDate(Carbon::yesterday())->setChangeFrequency(Url::CHANGE_FREQUENCY_MONTHLY)->setPriority(0.5));
        }
    }

    protected function pages()
    {
        $staticPages = SeoContent::query()->where('is_static', 1)->whereNull('deleted_at')->get();
        foreach ($staticPages as $staticPage) {
            $this->sitemap
                ->add(Url::create(env('URL_FRONT') . "/" . $staticPage->code)
                    ->setLastModificationDate(Carbon::today())
                    ->setChangeFrequency(Url::CHANGE_FREQUENCY_WEEKLY)
                    ->setPriority(0.9));
        }

        $dynamicPages = SeoContent::query()->where('is_static', 0)->whereNull('deleted_at')->get();
        foreach ($dynamicPages as $dynamicPage) {

            $this->sitemap
                ->add(Url::create(env('URL_FRONT') . "/residential-complexes/" . $dynamicPage->code)
                    ->setLastModificationDate(Carbon::today())
                    ->setChangeFrequency(Url::CHANGE_FREQUENCY_WEEKLY)
                    ->setPriority(0.9));
        }

//        $roomCount = RoomCount::query()->pluck('count');
//        $roomTypes = RoomType::query()->pluck('code');
//        $classHousing = ClassHousing::pluck('code');
//
//        $rooms = array_merge($roomCount->toArray(), $roomTypes->toArray());
//        $rooms = array_merge($rooms, $classHousing->toArray());
//
//        $explodedRooms = implode($rooms, '|');
////        $pages = '|delivery|payment|guarantee|confidential|contacts|';
//        foreach (explode('|', $explodedRooms) as $page) {
//            $this->sitemap
//                ->add(Url::create(env('URL_FRONT') . "/residential-complexes/" . $page)
//                    ->setLastModificationDate(Carbon::yesterday())
//                    ->setChangeFrequency(Url::CHANGE_FREQUENCY_WEEKLY)
//                    ->setPriority(0.9));
//        }
    }
}
