<?php

namespace App\Console\Commands;

use App\Media;
use App\Util\Media\Filter;
use Illuminate\Console\Command;

class MediaFix extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'media:fix';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Fix media on v0.10.8+';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        if (! version_compare(config('pixelfed.version'), '0.10.8', 'ge')) {
            $this->error('Please update to version 0.10.8 or newer.');
            exit;
        }

        $classes = Filter::classes();

        Media::whereNotNull('filter_class')
            ->chunk(50, function ($filters) use ($classes) {
                foreach ($filters as $filter) {
                    $match = $filter->filter_class ? in_array($filter->filter_class, $classes) : true;
                    if (! $match) {
                        $filter->filter_class = null;
                        $filter->filter_name = null;
                        $filter->save();
                    }
                }
            });
    }
}
