<?php

namespace Razorpay\Api;

class Subscription extends Entity
{
    public function create($attributes = [])
    {
        return parent::create($attributes);
    }

    public function fetch($id)
    {
        return parent::fetch($id);
    }

    public function all($options = [])
    {
        return parent::all($options);
    }

    public function cancel($attributes = [])
    {
        $relativeUrl = $this->getEntityUrl() . $this->id . '/cancel';

        return $this->request('POST', $relativeUrl, $attributes);
    }

    public function createAddon($attributes = [])
    {
        $relativeUrl = $this->getEntityUrl() . $this->id . '/addons';

        return $this->request('POST', $relativeUrl, $attributes);
    }

    /**
     * Create a Registration Link
     * @param  array $attributes
     * @return array
     */
    public function createSubscriptionRegistration($attributes = [])
    {
        $relativeUrl = 'subscription_registration/auth_links';

        return $this->request('POST', $relativeUrl, $attributes);
    }

    public function update($attributes = [])
    {
        $relativeUrl = $this->getEntityUrl() . $this->id;

        return $this->request('PATCH', $relativeUrl, $attributes);
    }

    public function pendingUpdate()
    {
        $relativeUrl = $this->getEntityUrl() . $this->id . '/retrieve_scheduled_changes';

        return $this->request('GET', $relativeUrl, null);
    }

    public function cancelScheduledChanges()
    {
        $relativeUrl = $this->getEntityUrl() . $this->id . '/cancel_scheduled_changes';

        return $this->request('POST', $relativeUrl, null);
    }

    public function pause($attributes = [])
    {
        $relativeUrl = $this->getEntityUrl() . $this->id . '/pause';

        return $this->request('POST', $relativeUrl, $attributes);
    }

    public function resume($attributes = [])
    {
        $relativeUrl = $this->getEntityUrl() . $this->id . '/resume';

        return $this->request('POST', $relativeUrl, $attributes);
    }

    public function deleteOffer($offerId)
    {
        $relativeUrl = $this->getEntityUrl() . $this->id . '/' . $offerId;

        return $this->request('DELETE', $relativeUrl);
    }
}
