<?php

namespace App\Exports;

use App\Log;
use Carbon\Carbon;
use Illuminate\Support\Facades\Auth;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\WithHeadings;

class specifyPeriod implements FromQuery, WithHeadings
{
    use Exportable;

    public function filter($from_date, $to_date)
    {
        $this->from_date = $from_date;
        $this->to_date = $to_date;
        return $this;
    }

    public function query()
    {
        $user = Auth::user();
        $query = Log::query()->select('id','sender','msisdn','network','message','submit_date','delivery_date','status')->where('user_id', $user->id);

        if ($this->from_date && $this->to_date) {

            $from_date_str = $this->from_date;
            $to_date_str = $this->to_date;

            $from_date = Carbon::parse(Carbon::parse($from_date_str)->toDateString());
            $to_date = Carbon::parse(Carbon::parse($to_date_str)->addDay()->toDateString());
            $to_date->subSecond();

            if ($from_date->lte($to_date)) {
                $query = $query->where([
                    ['submit_date', '>=', $from_date->toDateTimeString()],
                    ['submit_date', '<=', $to_date->toDateTimeString()],
                ]);
            } else {
                $query = $query->where('id', '0');
            }
        } else {
            $query = $query->where('id', '0');
        }

        $query = $query->orderBy('submit_date', 'desc');

        return $query;
    }

    public function headings(): array
    {
        return ['id','sender','msisdn','network','message','submit_date','delivery_date','status'];
    }

}
