package com.googlecode.googleplus.core;

import org.springframework.social.connect.ApiAdapter;
import org.springframework.social.connect.ConnectionValues;
import org.springframework.social.connect.UserProfile;
import org.springframework.social.connect.UserProfileBuilder;

import com.googlecode.googleplus.Plus;
import com.googlecode.googleplus.model.person.Person;

public class GooglePlusAdapter implements ApiAdapter<Plus> {

    public boolean test(Plus api) {
        try {
            api.getPeopleOperations().get("me");
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    public void setConnectionValues(Plus api, ConnectionValues values) {
        Person person = api.getPeopleOperations().get("me");
        values.setProviderUserId(person.getId());
        values.setDisplayName(person.getName().getFormatted());
        values.setProfileUrl(person.getUrl());
        values.setImageUrl(person.getImage().getUrl());
    }

    public UserProfile fetchUserProfile(Plus api) {
        Person person = api.getPeopleOperations().get("me");
        UserProfileBuilder builder = new UserProfileBuilder().setFirstName(person.getName().getGivenName()).setLastName(person.getName().getFamilyName());
        builder.setEmail(person.getGoogleAccountEmail());
        builder.setName(person.getName().getFormatted());
        return builder.build();
    }

    public void updateStatus(Plus api, String message) {
        throw new UnsupportedOperationException("Google+ API does not allow updating status");
    }

}