<?php namespace Todaymade\Daux\Format\Confluence;

class PublisherDelete
{
    /**
     * @var \Symfony\Component\Console\Output\OutputInterface
     */
    public $output;

    /**
     * @var array files that can be deleted
     */
    protected $deletable;

    /**
     * @var boolean should delete ?
     */
    protected $delete;

    /**
     * @var Api
     */
    protected $client;

    public function __construct($output, $delete, $client)
    {
        $this->output = $output;
        $this->delete = $delete;
        $this->client = $client;


        $this->deletable = [];
    }

    protected function listDeletable($published, $prefix = '')
    {
        foreach ($published['children'] as $child) {
            if (array_key_exists('children', $child) && count($child['children'])) {
                $this->listDeletable($child, $child['title'] . '/');
            }

            if (!array_key_exists('needed', $child)) {
                $this->deletable[$child['id']] = $prefix . $child['title'];
            }
        }
    }

    public function handle($published)
    {
        $this->listDeletable($published);

        if (!count($this->deletable)) {
            return;
        }

        if ($this->delete) {
            $this->doDelete();

        } else {
            $this->displayDeletable();
        }
    }

    protected function doDelete() {
        $this->output->writeLn('Deleting obsolete pages...');
        foreach ($this->deletable as $id => $title) {
            $this->output->writeLn("- $title");
            $this->client->deletePage($id);
        }
    }

    protected function displayDeletable() {
        $this->output->writeLn('Listing obsolete pages...');
        $this->output->writeLn("> The following pages will not be deleted, but just listed for information.");
        $this->output->writeLn("> If you want to delete these pages, you need to set the --delete flag on the command.");
        foreach ($this->deletable as $id => $title) {
            $this->output->writeLn("- $title");
        }
    }
}
