<?php

namespace App\Imports;


use App\Subscriber;
use App\Traits\ChimpTrait;
use Carbon\Carbon;
use Illuminate\Support\Collection;
use Illuminate\Validation\Rule;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithChunkReading;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithValidation;

class SubscriberImport implements ToCollection,WithHeadingRow, WithValidation,WithChunkReading
{

    use ChimpTrait;
    public function collection(Collection $rows)
    {

        $body = array();
        $insert = array();
        $carbon = Carbon::parse(now());

        foreach ($rows as $row):



           $push = ['email_address' => strtolower($row['email_address']),  'status'  => 'subscribed'];

           $requests =  [
                'method'=>'POST',
                'path'=>"lists/{$this->list()->list_id}/members/",
                'body'=> json_encode($push),
            ];



             if(!empty($row['email_address'])):
               $local = ['email_address' => strtolower($row['email_address']), 'created_at'=>$carbon,'updated_at'=>$carbon, 'user_mailing_list_id' => $this->list()->id, 'status' => 'subscribed', 'chimp_status' => 'successful',];

             array_push($body,$requests);
             array_push($insert,$local);
             endif;


        endforeach;



            if(count($insert) > 0)
                $this->local_publish($insert);

            if(count($body) > 0)
                 $this->chimp_member_publish($body);

    }



    public function rules(): array
    {
        // TODO: Implement rules() method.

        return [
            'email_address' => Rule::requiredIf('email_address'),
        ];
    }

    public function chunkSize(): int
    {
        return 1000;
    }

    public function chimp_member_publish($body)
    {

        $chimp =  $this->init();
        return $chimp->post('/batches',[
           'operations' => $body
        ]);

    }


    public function local_publish($params)
    {
        Subscriber::query()->insert($params);
    }

    public function list()
    {
        return $list = session()->get('list');
    }

}
