from selenium.webdriver.common.keys import Keys
import utils.config as cfg
import utils.console as console
from pathlib import Path
import os
import time
import sys
import tempfile
import csv

def filterLink(link):
    filters = cfg.google_filter()
    for f in filters:
        if f in link:
            return True
    return False

class ImageRaiderGrabber:
    def __init__(self):
        console.section('ImageRaider Reverse Image Search')
        console.task('Opening Webdriver')
        self.driver = cfg.getWebDriver()
        self.csv_error = False
    
    def insertImageLinks(self, images):
        self.driver.get("https://www.imageraider.com/")
        input = self.driver.find_elements_by_xpath('//*[@id="topurllist"]')[0]
        for i in images:
            console.subtask('Inserting {0}'.format(i))
            input.send_keys(i)
            input.send_keys(Keys.RETURN)
        console.subtask('Submitting...')
        btn = self.driver.find_elements_by_xpath('/html/body/div[4]/div/div/article/div/div[1]/form/span/input')[0]
        btn.click()
    
    def uploadLocalImage(self, img):
        self.driver.get("https://www.imageraider.com/")
        input = self.driver.find_elements_by_xpath('//*[@id="file"]')[0]
        p_i = os.path.join(os.getcwd(), img)
        input.send_keys(p_i)
        btn = self.driver.find_elements_by_xpath('/html/body/div[4]/div/div/article/div/div[1]/span/form/input[3]')[0]
        btn.click()
    
    def downloadCSV(self):
        time.sleep(5)
        console.task('Waiting for page to finish')
        try:
            while "Loading" in self.driver.page_source:
                sys.stdout.write(".")
                sys.stdout.flush()
                time.sleep(1)
        except:
            console.subfailure('Pagetimeout')
            sys.exit(-1)
        print('')
        console.task('Downloading CSV')
        time.sleep(2)
        try:
            dl = self.driver.find_elements_by_xpath('//*[@id="dltop"]')[0]
            dl.click()
        except:
            console.failure('No Results...')
            self.csv_error = True
        self.driver.close()
    
    def processCSV(self):
        if not self.csv_error:
            time.sleep(2)
            p = os.path.join(tempfile.gettempdir(), 'imageraider')
            pathlist = Path(p).glob('**/*')
            links = []
            for path in pathlist:
                path = str(path)
                with open(path, 'r') as csvfile:
                    reader = csv.DictReader(csvfile)
                    for row in reader:
                        if filterLink(row['Discovered Page URL']):
                            console.subtask('Added {0}'.format(row['Discovered Page URL']))
                            links.append(row['Discovered Page URL'])
            return links
        else:
            return []


