<?php

/**
 * Super-simple, minimum abstraction MailChimp API v2 wrapper
 * 
 * Requires curl (I know, right?)
 * This probably has more comments than code.
 * 
 * @author Drew McLellan <drew.mclellan@gmail.com>
 * @version 1.0
 */

class Signals_MailChimp {

    private $api_key;
    private $api_endpoint = 'https://<dc>.api.mailchimp.com/2.0/';
    private $verify_ssl   = false;


    /**
     * Create a new instance
     * @param string $api_key Your MailChimp API key
     */

    function __construct( $api_key ) {

        $this->api_key  = $api_key;
        $datacenter     = explode( '-', $this->api_key );

        if ( isset( $datacenter[1] ) ) {
            $this->api_endpoint = str_replace( '<dc>', $datacenter[1], $this->api_endpoint );
        }

    }


    /**
     * Call an API method. Every request needs the API key, so that is added automatically -- you don't need to pass it in.
     * @param  string $method The API method to call, e.g. 'lists/list'
     * @param  array  $args   An array of arguments to pass to the method. Will be json-encoded for you.
     * @return array          Associative array of json decoded API response.
     */

    public function call( $method, $args = array() ) {

        return $this->_raw_request( $method, $args );

    }


    /**
     * Performs the underlying HTTP request. Not very exciting
     * @param  string $method The API method to be called
     * @param  array  $args   Assoc array of parameters to be passed
     * @return array          Assoc array of decoded result
     */

    private function _raw_request( $method, $args = array() ) {      

        $args['apikey'] = $this->api_key;
        $url            = $this->api_endpoint . '/' . $method . '.json';
        $ch             = curl_init();

        curl_setopt( $ch, CURLOPT_URL, $url );
        curl_setopt( $ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json' ) );
        curl_setopt( $ch, CURLOPT_USERAGENT, 'PHP-MCAPI/2.0' );
        curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
        curl_setopt( $ch, CURLOPT_TIMEOUT, 10 );
        curl_setopt( $ch, CURLOPT_POST, true );
        curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, $this->verify_ssl );
        curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $args ) );

        $result         = curl_exec( $ch );

        curl_close( $ch );
        return $result ? json_decode( $result, true ) : false;

    }

}