#! /usr/bin/env python3
# -*- coding: utf-8 -*-
import gettext
import json
import sys
import requests
from ikabot.helpers.pedirInfo import read
from ikabot.helpers.gui import *
from ikabot.config import *

t = gettext.translation('insertCookies', localedir, languages=languages, fallback=True)
_ = t.gettext


def importExportCookie(session, event, stdin_fd, predetermined_input):
    """
    Parameters
    ----------
    session : ikabot.web.session.Session
    event : multiprocessing.Event
    stdin_fd: int
    predetermined_input : multiprocessing.managers.SyncManager.list
    """
    sys.stdin = os.fdopen(stdin_fd)
    config.predetermined_input = predetermined_input
    banner()
    try:
        print('Do you want to import or export the cookie?')
        print('(0) Exit')
        print('(1) Import')
        print('(2) Export')
        action = read(min=0, max=2)
        if action == 1:
            importCookie(session)
        elif action == 2:
            exportCookie(session)

        event.set()
    except KeyboardInterrupt:
        event.set()
        return


def importCookie(session):
    banner()
    print('{}⚠️ INSERTING AN INVALID COOKIE WILL LOG YOU OUT OF YOUR OTHER SESSIONS ⚠️{}\n\n'.format(bcolors.WARNING, bcolors.ENDC))
    print('Go ahead and export the cookie from another ikabot instance now and then')
    print('type your "ikariam" cookie below:')
    newcookie = read()
    newcookie = newcookie.strip()
    newcookie = newcookie.replace('ikariam=', '')
    cookies = session.getSessionData()['cookies']
    cookies['ikariam'] = newcookie
    if session.host in session.s.cookies._cookies:
        session.s.cookies.set('ikariam', newcookie, domain=session.host, path='/')
    else:
        session.s.cookies.set('ikariam', newcookie, domain='', path='/')

    html = session.s.get(session.urlBase).text

    if session.isExpired(html):
        print('{}Failure!{} All your other sessions have just been invalidated!'.format(bcolors.RED, bcolors.ENDC))
        enter()
    else:
        print('{}Success!{} This ikabot session will now use the cookie you provided'.format(bcolors.GREEN, bcolors.ENDC))
        sessionData = session.getSessionData()
        sessionData['cookies']['ikariam'] = newcookie
        session.setSessionData(sessionData)
        enter()
    session.get()


def exportCookie(session):
    banner()
    session.get()  # get valid cookie in case user has logged the bot out before running this feature
    ikariam = session.getSessionData()['cookies']['ikariam']
    print('Use this cookie to synchronise two ikabot instances on 2 different machines\n\n')
    print('ikariam='+ikariam+'\n\n')

    cookie = json.dumps({"ikariam": ikariam})  # get ikariam cookie, only this cookie is invalidated when the bot logs the user out.
    cookies_js = 'cookies={};i=0;for(let cookie in cookies){{document.cookie=Object.keys(cookies)[i]+\"=\"+cookies[cookie];i++}}'.format(cookie)
    print("""To prevent ikabot from logging you out while playing Ikariam do the following:
    1. Be on the "Your session has expired" screen
    2. Open Chrome javascript console by pressing CTRL + SHIFT + J
    3. Copy the text below, paste it into the console and press enter
    4. Press F5
    """)
    print(cookies_js)
    enter()
