<?php
/**
 * Created by PhpStorm.
 * User: sunil
 * Date: 12/11/18
 * Time: 2:02 PM
 */

namespace App\Imports;

use App\EmiPayment;
use App\Exports\Exporter;
use App\Moratorium;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Mail;
use Maatwebsite\Excel\Concerns\Importable;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Facades\Excel;

class MoratoriumImport implements ToCollection
{

    use Importable;
    private $request;

    public function __construct(Request $request)
    {
        $this->request = $request;
    }

    /**
     * @param Collection $collection
     */
    public function collection(Collection $collection)
    {
        $name = $this->request->get('from');
        $this->$name($collection);
    }

    public function startMoratoriumFile($collection)
    {
        $response = [];
        foreach ($collection as $item) {

            $isExist = EmiPayment::where('application_id', $item[0])->where('emi_date', $item[1])->first(['id', 'payment_status']);

            $moratorium = Moratorium::where('application_id', $item[0])->where('emi_date', $item[1])->first(['id']);

            if (isset($isExist->id) && $isExist->payment_status == 'rejected') {
                EmiPayment::where('id', $isExist->id)->update(['payment_status' => 'pending']);
            }

            if (isset($isExist->id) && (in_array($isExist->payment_status, ['pending', 'rejected'])) && !isset($moratorium->id)) {
                $response[] = [
                    'application_id' => $item[0],
                    'emi_date' => $item[1],
                    'interest_rate' => $item[2],
                    'status' => 1,
                    'user_id' => Auth::user() ? Auth::user()->id : 107,
                    'started_date' => Carbon::now()->toDateTimeString(),
                    'created_at' => Carbon::now()->toDateTimeString(),
                ];
            } else {
                $errors[] = ['id' => $item[0], 'moratorium_date' => $item[1], 'Interest Rate' => $item[2]];
            }
        }

        Moratorium::insert($response);

        if(isset($errors)){
            $request = new Request(['data' => $errors, 'sheet' => 'Sheet1']);

            $file = time() . 'Failed_To_Upload_Moratorium_Data' . '.xlsx';

            Excel::store((new Exporter($request)), $file);

            Mail::send('emails.reminders.basic_reminder',
                ['body' => 'Failed To Upload Moratorium Data']
                , function ($message) use ($file) {
                    $message->to(['payments@creditfair.in'])->subject('Failed To Upload Moratorium Data ' . Carbon::now()->toDateString());
                    $message->attachData(file_get_contents(storage_path() . '/app/' . $file), $file);
                });

            \Session::flash('error', 'Some data is not uploaded, we have sent you the file on email');
        }
    }
}