<?php
defined( '_JEXEC' ) or die;
/**
 * This file is part of googl-php
 *
 * https://github.com/sebi/googl-php
 *
 * Copyright 2011 by Sebastian Wyder <sebastian.wyder@sunrise.ch>
 *
 * googl-php is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

class GooglApi
{
    public $extended;
    private $target;
    private $apiKey;
    private $ch;

    function __construct($apiKey = null)
    {
    	# Extended output mode
    	$extended = false;
    	
        # Set Google Shortener API target
        $this->target = 'https://www.googleapis.com/urlshortener/v1/url?';

        # Set API key if available
        if ( $apiKey != null )
        {
	        $this->apiKey = $apiKey;
	        $this->target .= 'key='.$apiKey.'&';
        }

        # Initialize cURL
        $this->ch = curl_init();
        # Set our default target URL
        curl_setopt($this->ch, CURLOPT_URL, $this->target);
        # We don't want the return data to be directly outputted, so set RETURNTRANSFER to true
        curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true);
    }

	# Shorten a URL
    public function shorten($url, $extended = false)
    {
    	# Payload
        $data = array( 'longUrl' => $url );
        $data_string = '{"longUrl": "'.$url.'"}';

		# Set cURL options
        curl_setopt($this->ch, CURLOPT_POST, count($data));
        curl_setopt($this->ch, CURLOPT_POSTFIELDS, $data_string);
        curl_setopt($this->ch, CURLOPT_HTTPHEADER, Array('Content-Type: application/json'));

        if ( $extended || $this->extended)
        {
	        return json_decode(curl_exec($this->ch));
        }
        else
        {
	        return json_decode(curl_exec($this->ch))->id;
        }
    }

	# Expand an already shortened URL
    public function expand($url, $extended = false)
    {
    	# Set cURL options
        curl_setopt($this->ch, CURLOPT_URL, $this->target.'shortUrl='.$url);

        if ( $extended || $this->extended )
        {
            return json_decode(curl_exec($this->ch));
        }
        else
        {
            return json_decode(curl_exec($this->ch))->longUrl;
        }
    }

    function __destruct()
    {
        # Close the curl handle
        curl_close($this->ch);
        # Nulling the curl handle
        $this->ch = null;
    }
}

?>
