#! /usr/bin/env python

# Based on : https://elinux.org/RPi_Email_IP_On_Boot_Debian
#__author__ = 'Cody Giles'
#__license__ = "Creative Commons Attribution-ShareAlike 3.0 Unported License"
#__version__ = "1.0"
#__maintainer__ = "Cody Giles"
#__status__ = "Production"


## MUST BE RUN ON PYTHON 2
import subprocess, pdb, smtplib, datetime, socket, time
from email.mime.text import MIMEText

#time.sleep(30)
REMOTE_SERVER = "www.google.com"
def is_connected(hostname):
  try:
    # see if we can resolve the host name -- tells us if there is
    # a DNS listening
    host = socket.gethostbyname(hostname)
    # connect to the host -- tells us if the host is actually
    # reachable
    s = socket.create_connection((host, 80), 2)
    return True
  except:
     pass
  return False

def connect_type(word_list):
    """ This function takes a list of words, then, depeding which key word, returns the corresponding
    internet connection type as a string. ie) 'ethernet'.
    """
    if 'wlan0' in word_list or 'wlan1' in word_list:
        con_type = 'wifi'
    elif 'eth0' in word_list:
        con_type = 'ethernet'
    else:
        con_type = 'current'

    return con_type

#Check for network before emailing
while not is_connected(REMOTE_SERVER):
    print('Waiting for network')
    time.sleep(1)

# Change to your own account information
# Account Information
to = 'radu_darie@brown.edu' # Email to send to.
gmail_user = 'radusraspberrypi@gmail.com' # Email to send from. (MUST BE GMAIL)
gmail_password = 'raspberry314' # Gmail password.
smtpserver = smtplib.SMTP('smtp.gmail.com', 587) # Server to use.

smtpserver.ehlo()  # Says 'hello' to the server
smtpserver.starttls()  # Start TLS encryption
smtpserver.ehlo()
smtpserver.login(gmail_user, gmail_password)  # Log in to server
today = datetime.date.today()  # Get current time/date

arg='ip route list'  # Linux command to retrieve ip addresses.
# Runs 'arg' in a 'hidden terminal'.
p=subprocess.Popen(arg,shell=True,stdout=subprocess.PIPE)
data = p.communicate()  # Get data from 'p terminal'.

# Split IP text block into three, and divide the two containing IPs into words.
ip_lines = data[0].splitlines()
split_line_a = ip_lines[-1].split()
#print(split_line_a)
#split_line_b = ip_lines[2].split()

# con_type variables for the message text. ex) 'ethernet', 'wifi', etc.
ip_type_a = connect_type(split_line_a)
#ip_type_b = connect_type(split_line_b)

#pdb.set_trace()
"""Because the text 'src' is always followed by an ip address,
we can use the 'index' function to find 'src' and add one to
get the index position of our ip.
"""
ipaddr_a = split_line_a[split_line_a.index('src')+1]
#ipaddr_b = split_line_b[split_line_b.index('src')+1]

# Creates a sentence for each ip address.
my_ip_a = 'Your %s ip is %s' % (ip_type_a, ipaddr_a)
#my_ip_b = 'Your %s ip is %s' % (ip_type_b, ipaddr_b)

# Creates the text, subject, 'from', and 'to' of the message.
#msg = MIMEText(my_ip_a + "\n" + my_ip_b)
msg = MIMEText(my_ip_a + "\n")
msg['Subject'] = 'IPs For RaspberryPi on %s' % today.strftime('%b %d %Y')
msg['From'] = gmail_user
msg['To'] = to
# Sends the message
smtpserver.sendmail(gmail_user, [to], msg.as_string())
# Closes the smtp server.
smtpserver.quit()
