<?php

namespace App\Member\Actions;

use App\Member\FilterScope;
use App\Member\Member;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Support\Facades\Storage;
use League\Csv\Writer;
use Lorisleiva\Actions\ActionRequest;
use Lorisleiva\Actions\Concerns\AsAction;
use Symfony\Component\HttpFoundation\StreamedResponse;

class ExportAction
{
    use AsAction;

    /**
     * @param Collection<int, Member> $members
     */
    public function handle(Collection $members): string
    {
        $csv = Writer::createFromString();

        $csv->insertOne(['Nachname', 'Vorname', 'Adresse', 'PLZ', 'Ort', 'Haupt-Telefon', 'Mobiltelefon', 'Arbeits-Telefon', 'E-Mail-Adresse']);

        foreach ($members as $member) {
            $csv->insertOne([
                $member->lastname,
                $member->firstname,
                $member->address,
                $member->zip,
                $member->location,
                $member->main_phone,
                $member->mobile_phone,
                $member->work_phone,
                $member->email,
            ]);
        }

        return $csv->toString();
    }

    public function asController(ActionRequest $request): StreamedResponse
    {
        $filter = FilterScope::fromRequest($request->input('filter'));

        $contents = $this->handle(Member::ordered()->withFilter($filter)->get());

        Storage::disk('temp')->put('mitglieder.csv', $contents);

        return Storage::disk('temp')->download('mitglieder.csv');
    }
}