<?php

namespace App\Repository;

use App\CourseOfConstruction;

class CourseOfConstructionRepository
{
    public function filter($parameters = [])
    {
        $query = CourseOfConstruction::query();
        $query->leftJoin('residential_complexes as rc', 'course_of_constructions.residental_complex_id', '=', 'rc.id')
            ->when($parameters['slug'], function ($query) use ($parameters) {
                $query->where('rc.code', '=', $parameters['slug']);
            })

            ->where(function ($query) use ($parameters) {
                if (isset($parameters['course_of_constructions'])) {
                    foreach ($parameters['course_of_constructions'] as $course) {
                        $year = $course['year'];
                        foreach ($course['month'] as $month) {
                            $dateFrom = new \DateTime($year .'-'.$month.'-01');
                            $dateFromFormat = $dateFrom->format('Y-m-d');

                            $dateTo = new \DateTime($year .'-'.$month.'-01');
                            $dateTo->modify('last day of this month');
                            $dateToFormat = $dateTo->format('Y-m-d');

                            $query
                                ->orWhereBetween('course_of_constructions.report_date', [$dateFromFormat, $dateToFormat]);
                        }
                    }
                }
            });

            $query->select(['course_of_constructions.*'])
            ->orderBy('course_of_constructions.report_date', 'desc');

        return $query->get();
    }
}
