#!/usr/bin/python
#import modules
import RPi.GPIO as GPIO
from time import sleep
import os
import picamera
import pytumblr
from fractions import Fraction

#create variables to hold commands 
makeVid = "convert -delay 50 image*.jpg animation.gif"

#create variables to hold pin numbers
readyLED = 22
captureLED = 17
processingLED = 27
button = 18

# AuthenticateS via OAuth, copy from https://api.tumblr.com/console/calls/user/info
client = pytumblr.TumblrRestClient(
  'your_consumer_key',
  'your_consumer_secret',
  'your_token',
  'your_token_secret'
)

#set up pins
GPIO.setmode(GPIO.BCM)
GPIO.setup(button, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(readyLED, GPIO.OUT)
GPIO.setup(captureLED, GPIO.OUT)
GPIO.setup(processingLED, GPIO.OUT)

camera = picamera.PiCamera() #initiate picamera module and class
camera.resolution = (640, 480) #set resolution of picture here
camera.brightness = 60 #set brightness settings to help with dark photos
camera.annotate_foreground = picamera.Color(y=0.2, u=0, v=0) #set color of annotation 


try:
    #read button 
    while True:
        GPIO.output(readyLED, True)
        input_state = GPIO.input(button)
        if input_state == True:
            print('Button Pressed')
            sleep(0.2)

            #start camera preview                
            camera.start_preview()
			
            GPIO.output(captureLED, True)
            sleep(1.5)
            #take photos
            for i, filename in enumerate(camera.capture_continuous('image{counter:02d}.jpg')):
                if i == 0:
                    GPIO.output(captureLED, False)
                    sleep(1)
                    GPIO.output(captureLED, True)
                    sleep(1.5)
                if i == 1:
                    GPIO.output(captureLED, False)
                    sleep(1)
                    GPIO.output(captureLED, True)
                    sleep(1.5)
                elif i == 2:
                    break
            GPIO.output(captureLED, False)
            camera.stop_preview() #stop preview
            print('converting to GIF') 
            GPIO.output(processingLED, True)
            os.system(makeVid) #send command to convert images to GIF
            GPIO.output(processingLED, False)
            print('uploading') #let us know photo is about to start uploading
            GPIO.output(processingLED, True)
            #upload photo to Tumblr
            client.create_photo(
		'your_tumblr_username',	#update to your username
		state="published",
		tags=["picamera", "raspberry pi", "MFNY17", "GIF", "Maker Faire"],
		data="animation.gif")
            GPIO.output(processingLED, False)
            print("uploaded") #let us know GIF has been uploaded
            GPIO.output(processingLED, True)
	    sleep(.25)
            GPIO.output(processingLED, False)
    
    GPIO.cleanup() #cleanup GPIO channels
    
#hit Ctrl + C to stop program
except KeyboardInterrupt:
    print ('program stopped')
    GPIO.output(readyLED, False)