import redis
import time
import json
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time
import os
import urllib.parse
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import codecs
import random
from bs4 import BeautifulSoup
import requests
import time
import rpyc
import sys
import docker

driver=None
headers = {
        "Authorization": "Bearer " + "t35vhZtWNgvDNWHc3DJh0OKll3mcB9GvC8K2EAkBug2",
        "Content-Type": "application/x-www-form-urlencoded"
}



def send_msg(kw):
    params = {"message": "處理關鍵字: "+kw}  
    r = requests.post("https://notify-api.line.me/api/notify",headers=headers, params=params)


def empty_query(q):
    global driver
    googleurl='https://www.google.com/search?q='+urllib.parse.quote(q)
    driver.get(googleurl)
    time.sleep(3)


def process_query(qs):
    q=qs[0]
    domain=qs[2]
    cnt=qs[1]
    global driver
    googleurl='https://www.google.com/search?q='+urllib.parse.quote(q)
    driver.get(googleurl)
    time.sleep(3)
    if cnt > 0:
        for i in range(cnt):
            elmt=driver.find_element_by_xpath("//a[@id='pnnext']")
            webdriver.ActionChains(driver).move_to_element(elmt).perform()
            webdriver.ActionChains(driver).move_to_element(elmt).click().perform()
    time.sleep(3)



    elmts=driver.find_elements_by_xpath("//div[@class='g']//div[@class='yuRUbf']//a")
    idx=1
    ranking=-1
    for elmt in elmts:
        href=elmt.get_attribute('href')
        txt=elmt.text
        if len(txt)>10:
#            if 'hhh.com.tw' in href:
#            if 'hhh.com.tw' in href:
#            if 'ai.choozmo.com' in href:
            if domain in href:
#            if 'searchome.net' in href:
                webdriver.ActionChains(driver).move_to_element(elmt).perform()
                webdriver.ActionChains(driver).move_to_element(elmt).click().perform()
                break


def run_once(q):
    global driver
    result=[]
    client = docker.from_env()
    ls=client.containers.list()
    print(ls)
    ls[0].restart()

    time.sleep(10)
    options = webdriver.ChromeOptions()

    driver = webdriver.Remote(
        command_executor='http://127.0.0.1:4444/wd/hub',
    desired_capabilities=options.to_capabilities())
    driver.set_window_size(1400,1000)

    print(q)
    print(q[0])
    process_query(q)
    send_msg(q[0])
#            empty_query(q)

    intsleep=random.randint(5,12)

    time.sleep(intsleep)




r = redis.Redis(host='db.ptt.cx', port=6379, db=1,password='choozmo9')
#r = redis.Redis(host='db.ptt.cx', port=6379, db=1)
p = r.pubsub(ignore_subscribe_messages=True)
p.subscribe('q_clickbot')

while True:
    message = p.get_message()
    if message:
        jsobj=json.loads(message['data'].decode('utf-8'))
        print(jsobj)
        run_once(jsobj)
    time.sleep(0.001)  # be nice to the system :)


