package main

import (
	"encoding/json"
	"fmt"
	"golang.org/x/net/context"
	"golang.org/x/oauth2"
	"io/ioutil"
	"log"
	"net/http"
)

type UserSNSInfo struct {
	//Id string			`json:"id"`
	Name        string `json:"name"`
	Email       string `json:"email"`
	AccessToken string
}

func GetAccessToken(config *oauth2.Config, code string) *oauth2.Token {

	token, err := config.Exchange(context.Background(), code)

	if err != nil {
		log.Fatal(err)
	}

	fmt.Println(token.AccessToken, "Expire :", token.Expiry, "type: ", token.TokenType)

	return token
}

func GetSNSInfo(config *oauth2.Config, code string, snsType SNSType) UserSNSInfo {

	var response *http.Response
	var err error

	accessToken := GetAccessToken(config, code)
	if snsType == FB_TYPE {
		response, err = http.Get("https://graph.facebook.com/me?fields=id,name,email&access_token=" + accessToken.AccessToken)
	} else if snsType == GG_TYPE {
		response, err = http.Get("https://www.googleapis.com/oauth2/v3/userinfo?access_token=" + accessToken.AccessToken)
	}

	if err != nil {
		fmt.Println(err.Error())
	}

	data, err := ioutil.ReadAll(response.Body)

	if err != nil {
		fmt.Println(err.Error())
	}
	userinfo := UserSNSInfo{}
	json.Unmarshal([]byte(data), &userinfo)
	userinfo.AccessToken = accessToken.AccessToken

	fmt.Printf("Username %s  and email is %s<br>", userinfo.Name, userinfo.Email)

	return userinfo
}
