import json
import os
import threading
import time
import traceback
from datetime import timedelta

import cloudscraper
import django
import mouse
import requests
import unidecode
from bs4 import BeautifulSoup
from django.db.models import Q, Sum, F, Case, When, Value, Subquery, OuterRef, Exists, DateTimeField, Max
from django.utils import timezone



os.environ.setdefault('DJANGO_SETTINGS_MODULE','futplus.settings')
django.setup()
from sbc.models import SBCType, SBCTarget, SBCWorker, SBCProcess
from sbc.login_to_ea_with_selenium import login_to_account
from sbc.sbc_solver import SBCSolver
from futplus.settings import BASE_DIR
from accounts.models import FifaAccount, PlayerCard, MuleAccounts, CloseWebAppTransfers, Console, CloseWebAppSnipes, PC, \
    FifaProxy
from utils.public_moves import PublicMoves

def go_to_ps_remote():
    print(public_moves.wait_for_image(os.path.join(BASE_DIR, 'utils/controls/ps_remote_play_icon.png')))
    public_moves.get_screen_shot()
    futplus_icon_pos = public_moves.get_image_position(
        os.path.join(BASE_DIR, 'utils/controls/futplus_icon.png'),
        'screen_shot_tmp.jpg')
    print(futplus_icon_pos)
    mouse.move(futplus_icon_pos['top_left'][0], futplus_icon_pos['top_left'][1])
    mouse.click('left')
    while True:
        time.sleep(10)
        public_moves.ps4_buttons.circle()
        time.sleep(1)
        public_moves.ps4_buttons.circle()
        time.sleep(1)
        public_moves.ps4_buttons.circle()
        time.sleep(1)
        public_moves.ps4_buttons.ps()
        time.sleep(3)
        if public_moves.control_state('ps4_main'):
            break

def open_remote_play(user=''):
    if user:
        os.system('psexec -u %s -p 88888888 "C:\Program Files (x86)\Sony\PS Remote Play\RemotePlay.exe"' % user)
    else:
        os.system('"C:\Program Files (x86)\Sony\PS Remote Play\RemotePlay.exe"')


def console_open_ultimate():
    print('opening ultimate in console')
    public_moves.get_screen_shot()
    if not public_moves.has_image(os.path.join(BASE_DIR, 'utils/controls/ps_remote_play_icon.png'),'screen_shot_tmp.jpg'):
        while True:
            print('need to open ps remote play for this user')
            try:
                os.system("TASKKILL /F /IM RemotePlay.exe")
            except:
                pass
            time.sleep(23)
            threading.Thread(target=open_remote_play, kwargs={'user': ''}).start()
            time.sleep(7)
            go_to_ps_remote()
            if not public_moves.go_to_state('ps4_main', 'home_main', special_order='check_key'):
                print('need to open ps remote play for key user')
                try:
                    os.system("TASKKILL /F /IM RemotePlay.exe")
                except:
                    pass
                time.sleep(23)
                threading.Thread(target=open_remote_play, kwargs={'user': 'test'}).start()
                time.sleep(7)
                go_to_ps_remote()
                public_moves.go_to_state('ps4_main', 'home_main', special_order='just_enter_fifa')
                time.sleep(2)
            else:
                break



# console_open_ultimate()
#
# print('test')


def test(player_name,player_rate):
    player_name = player_name.lower()
    player_name = public_moves.remove_other_letters_except_latin(player_name)
    players_list = []
    while True:
        new_player = public_moves.get_players_position()
        new_player_name = new_player[0].replace('\x0c', '').strip().lower()
        new_player_name = public_moves.remove_other_letters_except_latin(new_player_name)
        new_player_rate = new_player[1].replace('\x0c', '').strip()
        if new_player_rate == '719':
            new_player_rate = '79'
        print('player data =', player_name, new_player_name, new_player_rate, player_rate)
        if int(new_player_rate) == int(player_rate) and len(player_name) == len(new_player_name):
            counter = 0
            equal = 1
            while counter < len(player_name):
                if (player_name[counter] != new_player_name[counter]) and (player_name[counter] != '*'):
                    equal = 0
                    break
                counter += 1
            if equal:
                public_moves.ps4_buttons.cross()
                return True

        #     (unidecode.unidecode(player_name.lower()) in unidecode.unidecode(new_player_name.lower())
        # )) and int(new_player_rate) == int(player_rate):
        #     ps4_buttons.cross()
        #     return True
        if new_player_name in players_list:
            break
        players_list.append(new_player_name)
        public_moves.ps4_buttons.down()
        time.sleep(1)

    print('i am here')
    public_moves.get_screen_shot()
    if public_moves.has_image(os.path.join(BASE_DIR, 'utils/controls/just_one_search_result.PNG'),
                      "screen_shot_tmp.jpg"):
        print('just one result founded')
        try:
            counter = 0
            equal = 1
            while counter < len(player_name):
                if (str(player_name[counter]) not in str(new_player_name)) and (str(player_name[counter]) != '*'):
                    equal = 0
                    break
                counter += 1
            if equal:
                public_moves.ps4_buttons.cross()
                return True
            else:
                print(player_name[counter],new_player_name)
        except:
            print(traceback.format_exc())

        # if ((player_name in new_player_name) or
    print('player not found')
    return False
# print(test('simon kj*r','83'))

squad_positions_in_futbin = {
            '3-1-4-2': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid5', 'cardlid7', 'cardlid6',
                        'cardlid4', 'cardlid3', 'cardlid2', 'cardlid1'],
            '3-4-1-2': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid7', 'cardlid6', 'cardlid5',
                        'cardlid4', 'cardlid2', 'cardlid3', 'cardlid1'],
            '3-4-2-1': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid7', 'cardlid6', 'cardlid5',
                        'cardlid4', 'cardlid3', 'cardlid1', 'cardlid2'],
            '3-4-3': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid7', 'cardlid6', 'cardlid5',
                      'cardlid4', 'cardlid3', 'cardlid2', 'cardlid1'],
            '3-5-2': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid6', 'cardlid5', 'cardlid7',
                      'cardlid4', 'cardlid2', 'cardlid3', 'cardlid1'],
            '4-1-2-1-2': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid7', 'cardlid5', 'cardlid6',
                          'cardlid4', 'cardlid2', 'cardlid3', 'cardlid1'],
            '4-1-2-1-2 (2)': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid7', 'cardlid5', 'cardlid6',
                              'cardlid4', 'cardlid2', 'cardlid3', 'cardlid1'],
            '4-1-3-2': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid7', 'cardlid5', 'cardlid6',
                        'cardlid3', 'cardlid4', 'cardlid2', 'cardlid1'],
            '4-1-4-1': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid7', 'cardlid6', 'cardlid5',
                        'cardlid4', 'cardlid3', 'cardlid2', 'cardlid1'],
            '4-2-2-2': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid7', 'cardlid6', 'cardlid5',
                        'cardlid4', 'cardlid3', 'cardlid2', 'cardlid1'],
            '4-2-3-1': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid7', 'cardlid6', 'cardlid5',
                        'cardlid4', 'cardlid3', 'cardlid2', 'cardlid1'],
            '4-2-3-1 (2)': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid7', 'cardlid6', 'cardlid5',
                            'cardlid4', 'cardlid2', 'cardlid3', 'cardlid1'],
            '4-2-4': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid7', 'cardlid6', 'cardlid5',
                      'cardlid4', 'cardlid2', 'cardlid1', 'cardlid3'],
            '4-3-1-2': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid7', 'cardlid6', 'cardlid5',
                        'cardlid4', 'cardlid3', 'cardlid2', 'cardlid1'],
            '4-3-2-1': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid7', 'cardlid6', 'cardlid5',
                        'cardlid4', 'cardlid3', 'cardlid1', 'cardlid2'],
            '4-3-3': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid7', 'cardlid6', 'cardlid5',
                      'cardlid4', 'cardlid3', 'cardlid2', 'cardlid1'],
            '4-3-3 (2)': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid7', 'cardlid5', 'cardlid6',
                          'cardlid4', 'cardlid3', 'cardlid2', 'cardlid1'],
            '4-3-3 (3)': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid7', 'cardlid6', 'cardlid4',
                          'cardlid5', 'cardlid3', 'cardlid2', 'cardlid1'],
            '4-3-3 (4)': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid7', 'cardlid6', 'cardlid4',
                          'cardlid5', 'cardlid3', 'cardlid2', 'cardlid1'],
            '4-3-3 (5)': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid7', 'cardlid5', 'cardlid6',
                          'cardlid4', 'cardlid2', 'cardlid3', 'cardlid1'],
            '4-4-1-1': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid7', 'cardlid6', 'cardlid5',
                        'cardlid4', 'cardlid3', 'cardlid2', 'cardlid1'],
            '4-4-1-1 (2)': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid7', 'cardlid6', 'cardlid5',
                            'cardlid4', 'cardlid3', 'cardlid2', 'cardlid1'],
            '4-4-2': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid7', 'cardlid6', 'cardlid5',
                      'cardlid4', 'cardlid3', 'cardlid2', 'cardlid1'],
            '4-4-2 (2)': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid7', 'cardlid5', 'cardlid4',
                          'cardlid6', 'cardlid3', 'cardlid2', 'cardlid1'],
            '4-5-1': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid7', 'cardlid6', 'cardlid4',
                      'cardlid2', 'cardlid5', 'cardlid3', 'cardlid1'],
            '4-5-1 (2)': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid7', 'cardlid6', 'cardlid5',
                          'cardlid4', 'cardlid3', 'cardlid2', 'cardlid1'],
            '5-2-1-2': ['cardlid11', 'cardlid10', 'cardlid7', 'cardlid9', 'cardlid8', 'cardlid6', 'cardlid5',
                        'cardlid4', 'cardlid2', 'cardlid3', 'cardlid1'],
            '5-2-2-1': ['cardlid11', 'cardlid10', 'cardlid7', 'cardlid9', 'cardlid8', 'cardlid6', 'cardlid5',
                        'cardlid4', 'cardlid3', 'cardlid2', 'cardlid1'],
            '5-3-2': ['cardlid11', 'cardlid10', 'cardlid7', 'cardlid9', 'cardlid8', 'cardlid6', 'cardlid5',
                      'cardlid4', 'cardlid3', 'cardlid2', 'cardlid1'],
            '5-4-1': ['cardlid11', 'cardlid10', 'cardlid9', 'cardlid8', 'cardlid7', 'cardlid6', 'cardlid5',
                      'cardlid4', 'cardlid3', 'cardlid2', 'cardlid1']
        }


def json_file_check(player, player_asset_id):
    temp_f_name = player['f'].lower()
    temp_l_name = player['l'].lower()
    try:
        temp_c_name = player['c'].lower()
    except:
        temp_c_name = ''
    temp_id_name = player['id']
    player_name = ''
    if str(temp_id_name) == str(player_asset_id):
        if temp_c_name:
            player_name = temp_c_name
        else:
            player_name = temp_f_name + ' ' + temp_l_name
        # contains = 0
        # for each_part in player_name.split():
        #     if temp_f_name.find(each_part) != -1:
        #         contains = 1
        # if not contains:
        #     player_name = temp_f_name + ' ' + player_name
    return player_name

def get_player_fifa_name_by_id(player_asset_id=''):
    players_file = open(os.path.join(BASE_DIR, 'utils/players.json'), encoding='utf-8')
    players_data = players_file.read()
    players_file.close()
    players_data = json.loads(players_data)
    player_name = ''
    for player in players_data['LegendsPlayers']:
        player_name = json_file_check(player, player_asset_id)
        if player_name:
            return player_name

    if not player_name:
        for player in players_data['Players']:
            player_name = json_file_check(player, player_asset_id)
            if player_name:
                return player_name
    # print result_list
    return player_name


def use_cloud_scraper(link):
    scraper = cloudscraper.create_scraper(browser={
        'browser': 'firefox',
        'platform': 'linux',
        'mobile': False
    })
    resp = scraper.get(link)
    return resp.text


def most_common(lst):
    return max(set(lst), key=lst.count)


def get_price_from_futbin_and_futwiz( player_asset_id):
        resp = use_cloud_scraper('https://www.futbin.com/22/playerPrices?player=%s' % player_asset_id)
        try:
            # json_resp = resp.json()
            json_resp = json.loads(resp)
        except:
            print(resp)
            print(traceback.format_exc())
            time.sleep(3000)

        futbin_prices = json_resp[str(player_asset_id)]['prices']['ps']
        futbin_all_prices_list = []
        if futbin_prices.get('LCPrice', "0") != "0":
            futbin_all_prices_list.append(futbin_prices.get('LCPrice', "0"))
        if futbin_prices.get('LCPrice2', "0") != "0":
            futbin_all_prices_list.append(futbin_prices.get('LCPrice2', "0"))
        if futbin_prices.get('LCPrice3', "0") != "0":
            futbin_all_prices_list.append(futbin_prices.get('LCPrice3', "0"))
        if futbin_prices.get('LCPrice4', "0") != "0":
            futbin_all_prices_list.append(futbin_prices.get('LCPrice4', "0"))
        if futbin_prices.get('LCPrice5', "0") != "0":
            futbin_all_prices_list.append(futbin_prices.get('LCPrice5', "0"))
        print('futbin_all_prices_list = ', futbin_all_prices_list)
        if len(futbin_all_prices_list) == 0:
            futbin_all_prices_list = ["0"]
        futbin_player_price = most_common(futbin_all_prices_list)
        # futbin_player_price = json_resp[str(player_asset_id)]['prices']['ps']['LCPrice']
        futbin_price_update_time = json_resp[str(player_asset_id)]['prices']['ps']['updated']
        print('futbin player price = ', futbin_player_price, futbin_price_update_time)

        # try:
        #     futwiz_base_url = 'https://www.futwiz.com'
        #     resp = se2.get(futwiz_base_url + '/en/player/history/%s' % player_asset_id)
        #     # soup = BeautifulSoup(resp.content, "html.parser")
        #     print(futwiz_base_url + '/en/player/history/%s' % player_asset_id)
        #     dom = html.fromstring(resp.text)
        #     a_elem_href = (dom.xpath("//div[@class = 'pull-left mr-10 text-center mb-10']/a")[0]).attrib['href']
        #     # print a_elem_href
        #     resp = se2.get(futwiz_base_url + a_elem_href)
        #     # soup = BeautifulSoup(resp.content, "html.parser")
        #     dom = html.fromstring(resp.text)
        #     ps_price_elem = (dom.xpath("//div[@class = 'playerprofile-price text-center']")[1]).text
        #     futwiz_ps_price_elem = ''.join(ps_price_elem.split())
        #     page = resp.content
        #     help_elem = page.find('class="hidemob"') + 1
        #     help_elem = page.find('class="hidemob"', help_elem)
        #     tag = '</span>'
        #     begin = page.find(tag, help_elem) + len(tag)
        #     end = page.find('<hr', begin)
        #     futwiz_ps_price_update_time_elem = page[begin:end]
        #     # ps_price_update_time_elem = (dom.xpath("//div[@class = 'playerprofile-prices-ps text-center']")[0]).text
        #     futwiz_ps_price_update_time_elem = ' '.join(futwiz_ps_price_update_time_elem.split())
        #     print('futwiz player price = ', futwiz_ps_price_elem, futwiz_ps_price_update_time_elem)
        # except:
        #     print(traceback.format_exc())
        price = futbin_player_price
        # if (futwiz_ps_price_update_time_elem.find('min') != -1) and (
        #         futbin_price_update_time.find('hour') != -1 or futbin_price_update_time.find('week') != -1 or futbin_price_update_time.find('Never') != -1):
        #     price = futwiz_ps_price_elem
        # elif (futwiz_ps_price_update_time_elem.find('hrs') != -1) and (futbin_price_update_time.find('week') != -1 or futbin_price_update_time.find('Never') != -1):
        #     price = futwiz_ps_price_elem
        price = int(price.replace(',', ''))
        return price, futbin_price_update_time


def update_sbc_from_futbin(sbc_number):
        print('check for a new sbc soloution')
        # TODO : fix this
        # if os.name == 'nt':
        #     return ''
        sbc_type = SBCType.objects.filter(sbc_number=sbc_number).exclude(must_done=2).first()
        # cursor2.execute('select id,sbc_link,sbc_price from sbc where sbc_number = %s', (sbc_number,))
        # sbc_data = cursor2.fetchone()
        sbc_id = sbc_type.id
        sbc_link = sbc_type.sbc_link

        # id_list = id_list_dic[sbc_number]
        minimum_likes = -100
        # resp = se2.get('https://www.futbin.com/squad-building-challenges/ALL/%s/page=1?page=1&loyalty=off&pos=off&version=gold'%sbc_number)

        # link = ''
        # squad_price = 0
        ps4_max_price = 0
        platforms = ['ps4', 'xone', 'pc']
        for platform in platforms:
            print('check platform = ', platform)
            if sbc_number == 20 or sbc_number == 36:
                resp = use_cloud_scraper(
                    'https://www.futbin.com/squad-building-challenges/ALL/%s/page=1?page=1&lowest=%s&pos=off&version=gold' % (
                        sbc_number, platform))
                # minimum_likes = 0
            else:
                resp = use_cloud_scraper(
                    'https://www.futbin.com/squad-building-challenges/ALL/%s/page=1?page=1&lowest=%s&loyalty=off&pos=off&version=gold' % (
                        sbc_number, platform))

            # soup = BeautifulSoup(resp.content, "html.parser")
            soup = BeautifulSoup(resp, "html.parser")
            squads = soup.find_all(class_="squad_url")
            if not ps4_max_price:
                temp_squad = squads[-1]
                likes = temp_squad.parent.findNext('td').findNext('td').findNext('td')
                ps4_max_price = int(likes.findNext('td').text.replace(',', ''))

            for squad in squads:
                bad_player = 0
                likes = squad.parent.findNext('td').findNext('td').findNext('td')
                loyalty = likes.findNext('td').findNext('td').findNext('td').findNext('td').findNext('td')
                if sbc_number == 20 and int(str(loyalty.text)) > 5:
                    continue
                if sbc_number == 36 and int(str(loyalty.text)) > 6:
                    continue
                if int(str(likes.text)) >= minimum_likes:
                    link = squad['href']
                    squad_price = int(likes.findNext('td').text.replace(',', ''))
                    if squad_price > ps4_max_price + 2000:
                        continue
                    if squad_price > 20000:
                        continue
                    print('new squad price = ', squad_price)
                    # break

                    print('link = ', link)
                    # print 'squad_price = ',squad_price
                    if link and squad_price:
                        targets_list = []
                        link = 'https://www.futbin.com' + link
                        # if link == sbc_link:
                        #     print('squad still the same')
                        #     sbc_type.price = squad_price + 2000
                        #     sbc_type.save()
                        #     # cursor2.execute('update sbc set sbc_price = %s where id = %s ', (squad_price + 1500, sbc_id))
                        #     print('sbc id  %s price updated' % sbc_id)
                        #     return 'updated'
                        link = 'https://www.futbin.com/22/squad/100213858/sbc'
                        # resp = se2.get(link)
                        resp = use_cloud_scraper(link)
                        # soup = BeautifulSoup(resp.content, "html.parser")
                        soup = BeautifulSoup(resp, "html.parser")
                        page_info = soup.find(id='page-info')
                        print('formation', page_info['data-formation'])
                        id_list = squad_positions_in_futbin[page_info['data-formation']]
                        for per_id in id_list:
                            target = soup.find(id=per_id)
                            target_link_a = target.find(class_="get-tp")
                            target_link = 'https://www.futbin.com' + target_link_a['href']
                            print('target_link = ', target_link)
                            target_div = target.find(class_="pcdisplay")
                            player_asset_id = target_div['data-base-id']
                            player_club = target_div['data-player-club']
                            # player_position = target_div['data-formpos-original']
                            player_position = target.find(class_='pcdisplay-pos').text
                            player_rare = target_div['data-rare']
                            player_rare_type = target_div['data-rare-type']
                            player_rating = target_div['data-rating']
                            if int(player_rare) > 1 or int(player_rare_type) > 1:
                                print('rare player found')
                                # resp2 = use_cloud_scraper(target_link)
                                # # soup = BeautifulSoup(resp.content, "html.parser")
                                # soup2 = BeautifulSoup(resp2, "html.parser")
                                # player_versions = soup2.find(class_="player-versions")
                                # try:
                                #     pversions = player_versions.find_all(class_="pversion")
                                #     if pversions:
                                #         print('####### another card founded')
                                #         bad_player = 1
                                #         break
                                #     else:
                                #         print('player hasnt any other card')
                                # except:
                                #     print('player hasnt any other card')
                                bad_player = 1
                                break

                                # return ''
                            # if sbc_number != 20 and sbc_number != 36:
                            if True:
                                resp2 = use_cloud_scraper(target_link)
                                # soup = BeautifulSoup(resp.content, "html.parser")
                                soup2 = BeautifulSoup(resp2, "html.parser")
                                player_versions = soup2.find(class_="player-versions")
                                try:
                                    pversions = player_versions.find_all(class_="pversion")
                                    if pversions:
                                        for pversion in pversions:
                                            a_elem = pversion.find('a')
                                            print(a_elem['data-level'], a_elem['data-rare-type'])
                                            if a_elem['data-level'] == 'gold' and int(a_elem['data-rare-type']) <= 1:
                                                print('####### another gold card founded')
                                                bad_player = 1
                                                break
                                    else:
                                        print('player hasnt any other card')
                                except:
                                    print('player hasnt any other card')
                                player_club_tag = soup2.find(class_="info_club")
                                player_club_name = player_club_tag.parent.text[1:]

                            if bad_player:
                                break
                            player_price, updated_time = get_price_from_futbin_and_futwiz(player_asset_id)
                            update_time_is_ok = 1
                            # update_time_is_ok = 0
                            # try:
                            #     if updated_time.find('secs') != -1:
                            #         update_time_is_ok = 1
                            #     elif updated_time.find('mins') != -1:
                            #         updated_time_min = updated_time.split()
                            #         if int(updated_time_min[0]) < 31:
                            #             update_time_is_ok = 1
                            # except:
                            #     print traceback.format_exc()
                            if not update_time_is_ok:
                                print(updated_time)
                                print('updated time is more than defined')
                                bad_player = 1
                                break
                            targets_list.append(
                                [player_asset_id, player_position, player_price, player_club, player_rare_type,
                                 player_rating, player_club_name])
                            time.sleep(1)
                        if bad_player:
                            print('its not a good solution')
                            continue
                        print('len(targets_list) = ', len(targets_list))
                        if len(targets_list) == 11:

                            count = 0
                            for target in targets_list:
                                player_name = get_player_fifa_name_by_id(target[0])
                                print('player name = ', player_name)
                                need_to_create = 0
                                try:
                                    sbc_target, created = SBCTarget.objects.get_or_create(sbc_type=sbc_type,
                                                                                          position=count)
                                except:
                                    need_to_create = 1

                                player_card, created = PlayerCard.objects.get_or_create(
                                    asset_id=target[0], price=target[2], position=target[1], team=target[3],
                                    rare=target[4], update_time=timezone.localtime() - timedelta(hours=1),
                                    name=player_name, rating=target[5], team_name=target[6])
                                if need_to_create:
                                    sbc_target, created = SBCTarget.objects.get_or_create(
                                        sbc_type=sbc_type, position=count, player=player_card)
                                sbc_target.asset_id = target[0]
                                sbc_target.price = target[2]
                                sbc_target.pos = target[1]
                                sbc_target.team = target[3]
                                sbc_target.rare = target[4]
                                sbc_target.rating = target[5]
                                sbc_target.team_name = target[6]
                                sbc_target.player = player_card

                                sbc_target.name = player_name

                                sbc_target.save()
                                # cursor2.execute('update sbc_targets set asset_id = %s , price = %s , pos = %s , club_id = %s where \
                                #  sbc_id = %s and position = %s',
                                #                 (target[0], target[2], target[1], target[3], sbc_id, count))
                                count += 1
                            sbc_type.sbc_link = link
                            sbc_type.sbc_price = squad_price + 2000
                            sbc_type.save()
                            print('new squad price = ', squad_price + 2000)
                            # cursor2.execute('update sbc set sbc_link = %s where id = %s ', (link, sbc_id))
                            # conn2.commit()
                            # # if sbc_max_price < squad_price + 1000:
                            # cursor2.execute('update sbc set sbc_price = %s where id = %s ', (squad_price + 1500, sbc_id))
                            # conn2.commit()
                            print('sbc id %s updated' % sbc_id)
                            return 'updated'
                        else:
                            print('some thing wrong')
                            print('targets_list = ', targets_list)
                    else:
                        print('no enough likes or no price')
                break
        return ''


# update_sbc_from_futbin(36)



def inject_coin(current_coins, coins_to):
    if current_coins < 500:
        print('cant inject, current coins =',current_coins)
        time.sleep(600)
        return False
    print('must inject coin', current_coins, coins_to)
    while current_coins < coins_to:
        if current_coins - ((float(current_coins) * 15) / 100) > 500:
            target_price = current_coins - ((float(current_coins) * 15) / 100)
        else:
            target_price = 500

        link = 'https://www.futbin.com/players?page=1&ps_price=0-%s&ps_prp=2,50&version=gold&sort=ps_price&order=desc' % (target_price)
        resp = use_cloud_scraper(link)
        soup = BeautifulSoup(resp, "html.parser")
        targets = soup.find_all(class_="player_img")
        for target in targets:
            target_asset_part = (target['data-original'])
            target_asset_part = target_asset_part[::-1]
            target_asset_begin = target_asset_part.find('.') + 1
            target_asset_end = target_asset_part.find('/', target_asset_begin)
            target_asset_id = (target_asset_part[target_asset_begin:target_asset_end])[::-1]
            parent_elem = target.parent.parent.parent
            target_link = parent_elem['data-url']
            print(target_asset_id,target_link)
            parent_childs = parent_elem.findAll("td", recursive=False)
            rate_elem = parent_childs[1]
            rate_span = rate_elem.find('span')
            rate = rate_span.text
            print(rate)

# pc = PC.objects.filter(name=33).first()
# this_console_accounts = FifaAccount.objects.filter(pc=pc).order_by('last_run_time').all()
# for acc in this_console_accounts:
#     try:
#         print('account_email = ', acc.user_name, 'delete_club_number = ', acc.delete_club_number,
#               'delete_club_renewal = ', acc.delete_club_renewal , 'console_name = ',acc.console.name)
#     except:
#         pass

# max_mule = MuleAccounts.objects.order_by('-fifa_account__credit').first()
# print(max_mule.fifa_account.credit)
# proxy = FifaProxy.objects.get(id=1911)
# count_fifa_acc = FifaAccount.objects.filter(proxy=proxy).all().count()
# print(count_fifa_acc)
# fifa_accounts = FifaAccount.objects.filter(pc=pc).distinct('console').all()
# for fifa_account in fifa_accounts:
#     print(fifa_account.console.name)
# console = Console.objects.filter(name=400).first()
# if console:
#     this_console_accounts = FifaAccount.objects.filter(console=console).order_by('last_run_time').all()
#     for acc in this_console_accounts:
#         print('account_email = ', acc.user_name, 'delete_club_number = ',acc.delete_club_number,
#               'delete_club_renewal = ', acc.delete_club_renewal , 'acc_id = ',acc.id)
#
#         sbc_workers = SBCWorker.objects.filter(fifa_account=acc)
#         for sbc_worker in sbc_workers:
#             print('sbc_worker.id', sbc_worker.id, 'sbc_worker.produced_coins = ', sbc_worker.produced_coins,
#                   'sbc_worker.start_time',sbc_worker.start_time , 'sbc_worker.end_time', sbc_worker.end_time)

# missed_items = CloseWebAppSnipes.objects.filter(error_desc='missed').all()
# sum_missed = 0
# for missed_item in missed_items:
#     sum_missed += missed_item.player_price - missed_item.player_min_price_from_futbin
#
# success_items = CloseWebAppSnipes.objects.filter(second_side_done=True).all()
# sum_success = 0
# for success_item in success_items:
#     sum_success += success_item.player_price - success_item.player_min_price_from_futbin
#
# print('sum_missed = ', sum_missed)
# print('sum_success = ', sum_success)
# sum_all = sum_missed + sum_success
# print('sum all = ', sum_all)
# print('missed percent =',(sum_missed/float(sum_all) * 100))

# print(CloseWebAppSnipes.objects.filter(first_side_ready=True, error=False, second_side_done=False).count())
# unstatus_snipes = CloseWebAppSnipes.objects.filter(first_side_ready=True, error=False, second_side_done=False)
# for unstatus_snipe in unstatus_snipes:
#     print(unstatus_snipe.id)

# must_check_club = True
# player_club = 47
# player_card_result = use_cloud_scraper('https://www.futbin.com/22/player/22571/rafael-leao')
# # tree = html.fromstring(player_card_result.text)
# # player_price_id = tree.xpath('//div[@id="page-info"]/@data-player-resource')[0]
# soup = BeautifulSoup(player_card_result, "html.parser")
# player_card_info = soup.find(id='Player-card')
# try:
#     current_player_rare = int(player_card_info['data-rare-type'])
# except:
#     current_player_rare = 2
# # if player_club:
#
# if current_player_rare < 2:
#     player_versions = soup.find(class_="player-versions")
#     try:
#         pversions = player_versions.find_all(class_="pversion")
#         if pversions:
#             for pversion in pversions:
#                 a_elem = pversion.find('a')
#                 print(a_elem['data-level'], a_elem['data-rare-type'])
#                 if a_elem['data-level'] == 'gold' and int(a_elem['data-rare-type']) <= 1:
#                     print('####### another gold card founded')
#                     must_check_club = True
#         else:
#             print('player hasnt any other card')
#     except:
#         print('player hasnt any other card')
# # print('here')
# if must_check_club:
#     club_elem = soup.find('th', text='Club ID')
#     print(club_elem.findNext('td').text)
#     if club_elem.findNext('td').text == str(player_club):
#         print('its OK', player_club)
#         # print('doesnt match club name. ', player_club)
#     else:
#         print('doesnt match club name. ', player_club)

# TODO: ziad paeen nazane. move all items and check from the web , l2 va r2 dar tanzime price
# transfer = CloseWebAppTransfers.objects.filter(error=False, for_inject=True, first_side_done=True,
#                                                second_side_done=False, web_app_is_on_it=False).first()
# if transfer:
#     print(transfer.id)
#     accounts = MuleAccounts.objects.filter(fifa_account__credit__gt=transfer.buy_now_price, in_use=False, error=False).order_by(
#         'last_used').all()
#     for account in accounts:
#         discharge_exist = CloseWebAppTransfers.objects.filter(error=False,for_discharge=True,first_side_done=False,
#                                                               first_account=account.fifa_account).first()
#         if discharge_exist:
#             print('discharge found account = ', account.id)
#             continue

# fifa_account = FifaAccount.objects.get(id=5023)
# transfer = CloseWebAppTransfers.objects.filter(error=False, for_inject=True, first_side_done=True,
#                                                    second_side_done=False, web_app_is_on_it=False,first_account=fifa_account).first()
# print(transfer.id)


# sbc_workers = SBCWorker.objects.filter(fifa_account=fifa_account).all()
# for sbc_worker in sbc_workers:
#     print(sbc_worker.id)
#
# # search_number = fifa_account.account_search.count()
# # print('search_number = ', search_number)
#
# # fifa_backup = fifa_account.account_backup_code.first()
# # print(fifa_backup.app_code)
# sbc_worker, created = SBCWorker.objects.get_or_create(is_done=False, has_error=False,
#                                                       running_platform='console', fifa_account=fifa_account,
#                                                       manual_loyal=True)
# sbc_worker.must_done = False
# sbc_worker.save()
# print(sbc_worker.id)
# sbc_solver_item = SBCSolver(sbc_worker.id, fifa_account.id, fifa_account.user_name,
#                             fifa_account.password,
#                             fifa_account.platform, sbc_worker.manual_loyal)
# sbc_solver_item.inject_coin(4800, 35000, need_open_and_close_ultimate=False)
#
# # #
# sbc_solver_item.discharge_with_snipe(18000, coins_to=1000)

# transfer = CloseWebAppTransfers.objects.filter(error=False, for_inject=True,
#                                                first_side_done=True,
#                                                second_side_done=False, first_account=fifa_account).first()
# print(transfer.id)

# print(sbc_solver_item.main_dic['sid'])
# sbc_solver_item.get_new_sid()
# print(sbc_solver_item.main_dic['sid'])

# url = "https://utas.external.s2.fut.ea.com/ut/auth"
# nucleus = 1005314974280
# auth_code = 'QUOxACgiM-TPA0O-V5sBXYxgn5K--p9ToG0S0do1AQ'
# payload = json.dumps({
#     "isReadOnly": False,
#     "sku": "FUT22WEB",
#     "clientVersion": 1,
#     "locale": "en-US",
#     "method": "authcode",
#     "priorityLevel": 4,
#     "identification": {
#         "authCode": auth_code,
#         "redirectUrl": "nucleus:rest"
#     },
#     "nucleusPersonaId": nucleus,
#     "gameSku": "FFA22PS4",
#     "ds": "12d10e066250aba254435c2db8250830be3bc6b5f383f26fb9c7eb5/86e4"
# })
# headers = {
#     'Content-Type': 'application/json',
#     'Origin': 'https://www.ea.com',
#     'Referer': 'https://www.ea.com',
#     'Host': 'utas.external.s2.fut.ea.com'
# }
#
# print('payload = ',payload)
# response = requests.request("POST", url, headers=headers, data=payload)
# print(response.text)
# accounts = [
# 'rassomakhini@bk.ru',
# 'vladlen.bogdanovskiy.89@bk.ru',
# 'sauraft.cerleve735@bk.ru',
# 'dril.gleb@bk.ru',
# 'conishisse@bk.ru',
# 'wenz_ang8184174@yeah.net',
# 'bardan.tolik@bk.ru',
# 'dumloshin92@bk.ru',
# 'den.zgurovets@bk.ru',
# 'zhen8844_0@yeah.net',
# 'khotentsev78@bk.ru',
# 'symnstunty9149@bk.ru',
# 'danila.lipustin@bk.ru',
# 'susanna.shatov@bk.ru',
# 'vlilueguri@bk.ru',
# 'zakhar.tatonenkov@bk.ru']
# for account in accounts:
#     fifa_account = FifaAccount.objects.get(user_name=account)
#     MuleAccounts.objects.create(fifa_account=fifa_account)
# failed_transfers = CloseWebAppTransfers.objects.filter(for_inject=True, first_side_done=False, error=False).all()
# for fail_transfer in failed_transfers:
#     fail_transfer.delete()
fifa_account = FifaAccount.objects.filter(id=2769).first()
# open_transfers = CloseWebAppTransfers.objects.filter(second_account=fifa_account, error=False,
#                                                    second_side_done=False).all()
# for open_transfer in open_transfers:
#     print(open_transfer.id)
# login_to_account('email', 'password', 'backup_code', use_proxy=1, proxy_ip='168.91.99.8', proxy_port='33109',proxy_user = 'simon_2052' , proxy_pass = '36987rdr', app_auth='',cookies = '')

# inject_coin(800, 15000)

sbc_worker, created = SBCWorker.objects.get_or_create(is_done=False, has_error=False,
                                                      running_platform='console', fifa_account=fifa_account,
                                                      manual_loyal=True)
sbc_worker.must_done = False
sbc_worker.save()
# for sbc_worker in sbc_workers:
#     print(sbc_worker.id)
# print(sbc_worker.id)
# sbc_processes = SBCProcess.objects.filter(worker=sbc_worker).all()
# for sbc_process in sbc_processes:
#     print(sbc_process.id)
print(sbc_worker.id)
# sbc_solver_item = SBCSolver(sbc_worker.id, fifa_account.id, fifa_account.user_name,
#                             fifa_account.password,
#                             fifa_account.platform, sbc_worker.manual_loyal)
# sbc_solver_item.logout_login()
# sbc_solver_item.active_squad_handler()
# sbc_solver_item.play_untill_end_process()

# agar credite mule ha kam bashe dorost anjam nemishe

public_moves = PublicMoves(sbc_worker)
# public_moves.get_screen_shot()
# print(public_moves.has_image(os.path.join(BASE_DIR, 'utils/controls/squad_battle_go_to_game.PNG'),
#                              'screen_shot_tmp.jpg'))
public_moves.play_untill_end_process()
# public_moves.set_price_with_l_and_r(700, 3300)
# public_moves.list_on_transfer_market(300,350)
# public_moves.ps4_buttons.r2()

# public_moves.ps4_buttons.right()
# del public_moves
# time.sleep(3)
# public_moves = PublicMoves(sbc_worker)
# public_moves.ps4_buttons.right()

# public_moves.search_player('Allan Rodriguez',50,263999,search_start_price=300,search_buy_now_price=500)

# print(public_moves.read_coin())
# public_moves.search_transfer_list_item()
# print(public_moves.has_image(os.path.join(BASE_DIR, 'utils/controls/news.png'),
#                              os.path.join(BASE_DIR, 'utils/test_news.png')))
# public_moves.loyal_process()

# public_moves.go_to_state('ultimate_team','transfer_market')

# public_moves.set_price(1700,second=True)

# for i in range(3):
#     public_moves.ps4_buttons.square()
#     time.sleep(1)
#     public_moves.get_screen_shot()
#     if not public_moves.has_image(os.path.join(BASE_DIR, 'utils/controls/list_on_transfer_market_sign.png'),
#                           'screen_shot_tmp.jpg'):
#         public_moves.ps4_buttons.cross()
#         time.sleep(2)
#     else:
#         break

# public_moves.list_on_transfer_market(2700, 5400, second=True)



# console = Console.objects.filter(name=387).first()
# fifa_accounts = FifaAccount.objects.filter(console=console, delete_club_number__lt=10,
#                                           delete_club_renewal=True).order_by('last_run_time').all()
# for fifa_account in fifa_accounts:
#     existed_sbc_worker = SBCWorker.objects.filter(is_done=False, has_error=False,
#                                                   running_platform='console', fifa_account=fifa_account,
#                                                   manual_loyal=True).first()
#     if existed_sbc_worker:
#         print(existed_sbc_worker.id)

def get_player_price_from_futbin(player_name, player_rate, player_known_as='', player_club=''):
    print('player_name : ', player_name, player_rate, player_known_as)
    params = {
        'year': 22,
        'extra': 1,
        'v': 1,
        'term': player_name
    }
    scraper = cloudscraper.create_scraper(browser={
        'browser': 'firefox',
        'platform': 'linux',
        'mobile': False
    })
    result = scraper.get('https://www.futbin.com/search', params=params)
    list_ids = []
    print('futbin search result : ', result.json())
    if isinstance(result.json(), dict) and result.json().get('error'):
        return 0, 'Never'
    for item in result.json():
        if item.get('rating') != str(player_rate):
            continue
        if player_known_as and (
                unidecode.unidecode(item.get('name').lower()) == unidecode.unidecode(player_known_as.lower()) or
                unidecode.unidecode(item.get('full_name').lower()) == unidecode.unidecode(player_known_as.lower())
        ):
            list_ids.append(item.get('id'))
            continue
        found = 1
        for i in unidecode.unidecode(player_name).split():
            if not (i in unidecode.unidecode(item.get('full_name').lower())):
                found = 0
        if found:
            list_ids.append(item.get('id'))
            continue
    print('list ids = ', list_ids)
    for id_item in list_ids:
        print('https://www.futbin.com/22/player/{}/'.format(id_item))
        player_card_result = scraper.get('https://www.futbin.com/22/player/{}/'.format(id_item))
        # tree = html.fromstring(player_card_result.text)
        # player_price_id = tree.xpath('//div[@id="page-info"]/@data-player-resource')[0]
        soup = BeautifulSoup(player_card_result.text, "html.parser")
        player_card_info = soup.find(id='Player-card')
        try:
            current_player_rare = int(player_card_info['data-rare-type'])
        except:
            current_player_rare = 2
        # if player_club:
        if current_player_rare < 2:
            player_versions = soup.find(class_="player-versions")
            try:
                pversions = player_versions.find_all(class_="pversion")
                if pversions:
                    for pversion in pversions:
                        a_elem = pversion.find('a')
                        print(a_elem['data-level'], a_elem['data-rare-type'])
                        if a_elem['data-level'] == 'gold' and int(a_elem['data-rare-type']) <= 1:
                            print('####### another gold card founded')
                            return 0, 0
                else:
                    print('player hasnt any other card')
            except:
                print('player hasnt any other card')
            # if player_card_result.text.find(player_club) == -1:
            #     print('doesnt match club name. ', player_club)
            #     continue
        page_info = soup.find(id='page-info')
        player_price_id = page_info['data-player-resource']
        futbin_prices = scraper.get('https://www.futbin.com/22/playerPrices?player={}'.format(player_price_id)
                                    ).json().get(str(player_price_id), {}).get('prices', {}).get('ps', [])
        futbin_all_prices_list = []
        if futbin_prices.get('updated') == 'Never':
            continue
        if futbin_prices.get('LCPrice', "0") != "0":
            futbin_all_prices_list.append(futbin_prices.get('LCPrice', "0"))
        if futbin_prices.get('LCPrice2', "0") != "0":
            futbin_all_prices_list.append(futbin_prices.get('LCPrice2', "0"))
        if futbin_prices.get('LCPrice3', "0") != "0":
            futbin_all_prices_list.append(futbin_prices.get('LCPrice3', "0"))
        if futbin_prices.get('LCPrice4', "0") != "0":
            futbin_all_prices_list.append(futbin_prices.get('LCPrice4', "0"))
        if futbin_prices.get('LCPrice5', "0") != "0":
            futbin_all_prices_list.append(futbin_prices.get('LCPrice5', "0"))
        if len(futbin_all_prices_list) == 0:
            futbin_all_prices_list = ["0"]
        print(futbin_all_prices_list)
        futbin_player_price = max(set(futbin_all_prices_list), key=futbin_all_prices_list.count)
        if futbin_player_price:
            return futbin_player_price.replace(',', '').replace('.', ''), futbin_prices.get('updated')
    return 0, 0

# print(public_moves.get_player_price_from_futbin('Robin Gosens',83,player_known_as='Gosens',player_club='Inter'))
# print(public_moves.get_round_price(int(public_moves.get_screen_text('start_price_tmp.jpg',convert=True, convert_type=2)[:-1].replace(',', '').replace('.', ''))))
# public_moves.set_price(1000,second=True)
# print(public_moves.get_screen_text('start_price_tmp.jpg',
#                                                           config='--psm 10 --oem 3 -c tessedit_char_whitelist=0123456789',
#                                                           convert=True, convert_type=2)[:-1].replace(',', '').replace('.', ''))



# sbc_workers = SBCWorker.objects.filter(Q(is_done=True),Q(running_platform='console'))
# for sbc_worker in sbc_workers:
#     print('sbc_worker.id', sbc_worker.id, 'sbc_worker.produced_coins = ', sbc_worker.produced_coins,
#           'sbc_worker.start_time',sbc_worker.start_time)
# print(len(sbc_workers))
# print('#################3')
# sbc_workers = SBCWorker.objects.filter(Q(end_time__gt=timezone.localtime() - timedelta(hours=24)), ~Q(produced_coins=0),
#                                        Q(is_done = True),Q(produced_coins__gt=2000))
# sbc_workers = SBCWorker.objects.filter(~Q(produced_coins=0))
def sum_produced_coin():
    sbc_workers = SBCWorker.objects.filter(Q(end_time__gt=timezone.localtime() - timedelta(hours=48)),
                                           ~Q(produced_coins=0),
                                           Q(is_done=True), Q(produced_coins__gt=50000))
    sum_produced_coin = 0
    for sbc_worker in sbc_workers:
        print('sbc_worker.id', sbc_worker.id, 'sbc_worker.produced_coins = ', sbc_worker.produced_coins,
              'sbc_worker.start_time', sbc_worker.start_time, 'doing time = ', sbc_worker.end_time - sbc_worker.start_time)
        sum_produced_coin += sbc_worker.produced_coins
    print(len(sbc_workers))
    print('sum_produced_coin =',sum_produced_coin)
#

# def search_player_select_price(number, default_number='00000150'):
#     number_text = ((8 - len(str(number))) * '0') + str(number)
#     current_place = 0
#     print('numbers = ', number_text, default_number)
#     for number_character in number_text:
#         for num in range(8 - current_place - len(number_text)):
#             # self.ps4_buttons.right()
#             print('right')
#             current_place += 1
#         number_character_2 = int(number_character) - int(default_number[current_place])
#         # self.new_print('number_character_2', number_character_2)
#         if number_character_2 > 0:
#             for i in range(number_character_2):
#                 print('up')
#                 # self.ps4_buttons.up()
#         else:
#             for i in range(abs(number_character_2)):
#                 print('down')
#                 # self.ps4_buttons.down()
#         number_text = number_text[1:]
#     # self.ps4_buttons.cross()
#
# search_player_select_price('00058500','00010500')
# os.system('"C:\Program Files (x86)\Sony\PS Remote Play\RemotePlay.exe"')

# SBCType.objects.update(update_time = timezone.localtime() - timedelta(hours=3), sbc_link = '')

## sbc solving times
def get_sbc_solving_times():
    sbc_workers = SBCWorker.objects.filter(Q(end_time__gt=timezone.localtime() - timedelta(hours=24)), ~Q(produced_coins=0),
                                           Q(is_done=True),Q(produced_coins__gt=2000))
    all_average = 0
    sum_all_average = 0
    sum_produced_coin = 0
    for sbc_worker in sbc_workers:
        print('sbc_worker.id', sbc_worker.id, 'sbc_worker.produced_coins = ', sbc_worker.produced_coins,
              'sbc_worker.start_time', sbc_worker.start_time, 'doing time = ', sbc_worker.end_time - sbc_worker.start_time)
        # sbc_worker = SBCWorker.objects.get(id=32488)
        sum_produced_coin += sbc_worker.produced_coins
        sbc_processes = SBCProcess.objects.filter(worker=sbc_worker).all().order_by('id').annotate(
            end_time_exists=Exists(SBCProcess.objects.filter(worker=sbc_worker, id__gt=OuterRef('id')).order_by('id')),
        ).exclude(end_time_exists=Value(False)).annotate(
            end_time=Subquery(SBCProcess.objects.filter(worker=sbc_worker, id__gt=OuterRef('id')).order_by('id').values('start_time')[:1],output_field=DateTimeField()),
        )
        print(sbc_processes.values_list('start_time','end_time'))
        sbc_processes = SBCProcess.objects.filter(worker=sbc_worker).all().order_by('id')
        worker_times = []
        for sbc_process in sbc_processes:
            worker_times.append([sbc_process.sbc_type.id, sbc_process.start_time])
        worker_times.append([sbc_worker.status, sbc_worker.status_change_time])
        worker_times.append(['end', sbc_worker.end_time])
        average_sbc = 0
        sum_count = 0
        for i in range(1,len(worker_times)):
            process_time = (worker_times[i][1] - worker_times[i-1][1]).total_seconds() / 60
            print(worker_times[i - 1][0], process_time)
            if i != len(worker_times) - 1:
                if 1 < process_time < 100 :
                    average_sbc += process_time
                    sum_count += 1
        if sum_count:
            print('sbc average time = ',average_sbc/sum_count)
            all_average += average_sbc/sum_count
            sum_all_average += 1
        print('#############################')
    print(len(sbc_workers))
    print('sum_produced_coin =', sum_produced_coin)
    if sum_all_average:
        print('all average sbc = ', all_average/sum_all_average)


# sbc_workers = SBCWorker.objects.filter(Q(start_time__gt=timezone.localtime() - timedelta(hours=48)),Q(running_platform='console'))
# print(len(sbc_workers))
# sbc_workers = SBCWorker.objects.filter(Q(start_time__gt=timezone.localtime() - timedelta(hours=48)),Q(running_platform='console'),Q(is_done=True))
# sum_coin = 0
# for sbc_worker in sbc_workers:
#     print('produced coin = ',sbc_worker.produced_coins)
#     sum_coin += sbc_worker.produced_coins
# print('sum_coin = ',sum_coin)
# print(len(sbc_workers))
# sbc_workers = SBCWorker.objects.filter(Q(start_time__gt=timezone.localtime() - timedelta(hours=48)),Q(running_platform='console'),Q(has_error=True))
# print(len(sbc_workers))

## each account transfers
# fifa_account = FifaAccount.objects.get(id=897)
# transfers = CloseWebAppTransfers.objects.filter(for_discharge=True, second_account=fifa_account,error=False).all().order_by('id')
# discharge_time = []
# for transfer in transfers:
#     discharge_time.append([transfer.player_name, transfer.put_for_sale_time, transfer.buy_now_price - transfer.start_price])
# average_dis = 0
# sum_count = 0
# for i in range(1,len(discharge_time)):
#     process_time = (discharge_time[i][1] - discharge_time[i-1][1]).total_seconds() / 60
#     print(discharge_time[i - 1][0], process_time, discharge_time[i-1][2])
#     # if i != len(discharge_time) - 1:
#     if process_time < 40:
#         average_dis += process_time
#         sum_count += 1
# if sum_count:
#     print('sbc average time = ', average_dis/sum_count)
# print('#############################')


# sum_credits = 0
# mule_accounts = MuleAccounts.objects.all()
# for mule_account in mule_accounts:
#     print(mule_account.fifa_account.user_name,mule_account.fifa_account.credit)
#     sum_credits += mule_account.fifa_account.credit
#
# print('sum credits = ',sum_credits)
# panjshanbe = 13864079

def update_sbc_from_futbin(sbc_number, must_change=False , sbc_id = 0,certain_link = ''):
    print('check for a new sbc soloution')
    # TODO : fix this
    # if os.name == 'nt':
    #     return ''
    if sbc_id:
        sbc_type = SBCType.objects.get(id=sbc_id)
    else:
        sbc_type = SBCType.objects.filter(sbc_number=sbc_number).exclude(must_done=2).first()
    # cursor2.execute('select id,sbc_link,sbc_price from sbc where sbc_number = %s', (sbc_number,))
    # sbc_data = cursor2.fetchone()
    sbc_id = sbc_type.id
    sbc_link = sbc_type.sbc_link
    # if sbc_type.console_cant_use:
    #     must_change = True
    # id_list = self.id_list_dic[sbc_number]
    minimum_likes = -100
    # resp = self.se2.get('https://www.futbin.com/squad-building-challenges/ALL/%s/page=1?page=1&loyalty=off&pos=off&version=gold'%sbc_number)

    # link = ''
    # squad_price = 0
    ps4_max_price = 0
    platforms = ['ps4', 'xone', 'pc']
    for platform in platforms:
        print('check platform = ', platform)
        if sbc_number == 20 or sbc_number == 36:
            resp = use_cloud_scraper(
                'https://www.futbin.com/squad-building-challenges/ALL/%s/page=1?page=1&lowest=%s&pos=off&version=gold' % (
                    sbc_number, platform))
            # minimum_likes = 0
        else:
            resp = use_cloud_scraper(
                'https://www.futbin.com/squad-building-challenges/ALL/%s/page=1?page=1&lowest=%s&loyalty=off&pos=off&version=gold' % (
                    sbc_number, platform))

        # soup = BeautifulSoup(resp.content, "html.parser")
        soup = BeautifulSoup(resp, "html.parser")
        squads = soup.find_all(class_="squad_url")
        if not ps4_max_price:
            temp_squad = squads[-1]
            likes = temp_squad.parent.findNext('td').findNext('td').findNext('td')
            ps4_max_price = int(likes.findNext('td').text.replace(',', ''))

        for squad in squads:
            bad_player = 0
            # if int(str(likes.text)) >= minimum_likes:
            if True:
                link = squad['href']
                if certain_link:
                    link = certain_link
                squad_price = 20000

                print('new squad price = ', squad_price)
                # break

                print('link = ', link)
                # print 'squad_price = ',squad_price
                if link and squad_price:
                    targets_list = []
                    # link = 'https://www.futbin.com' + link
                    if link == sbc_link:
                        if must_change:
                            print('squad link is the same but must change the solution')
                            continue
                        print('squad still the same')
                        sbc_type.refresh_from_db()
                        sbc_type.price = squad_price + 2000
                        sbc_type.save()
                        # cursor2.execute('update sbc set sbc_price = %s where id = %s ', (squad_price + 1500, sbc_id))
                        print('sbc id  %s price updated' % sbc_id)
                        return 'updated'
                    # resp = self.se2.get(link)
                    resp = use_cloud_scraper(link)
                    # soup = BeautifulSoup(resp.content, "html.parser")
                    soup = BeautifulSoup(resp, "html.parser")
                    page_info = soup.find(id='page-info')
                    print('formation', page_info['data-formation'])
                    id_list = squad_positions_in_futbin[page_info['data-formation']]
                    for per_id in id_list:
                        target = soup.find(id=per_id)
                        target_link_a = target.find(class_="get-tp")
                        target_link = 'https://www.futbin.com' + target_link_a['href']
                        print('target_link = ', target_link)
                        target_div = target.find(class_="pcdisplay")
                        player_asset_id = target_div['data-base-id']
                        player_club = target_div['data-player-club']
                        # player_position = target_div['data-formpos-original']
                        player_position = target.find(class_='pcdisplay-pos').text
                        player_rare = target_div['data-rare']
                        player_rare_type = target_div['data-rare-type']
                        player_rating = target_div['data-rating']
                        original_pos = target_div['data-formpos-original']
                        if original_pos != player_position:
                            print('current pos is not the same of original pos ...')
                            print('current_pos = ', player_position, 'original_pos = ', original_pos)
                            bad_player = 1
                            break
                        if int(player_rare) > 1 or int(player_rare_type) > 1:
                            print('rare player found')
                            # resp2 = self.use_cloud_scraper(target_link)
                            # # soup = BeautifulSoup(resp.content, "html.parser")
                            # soup2 = BeautifulSoup(resp2, "html.parser")
                            # player_versions = soup2.find(class_="player-versions")
                            # try:
                            #     pversions = player_versions.find_all(class_="pversion")
                            #     if pversions:
                            #         print('####### another card founded')
                            #         bad_player = 1
                            #         break
                            #     else:
                            #         print('player hasnt any other card')
                            # except:
                            #     print('player hasnt any other card')
                            bad_player = 1
                            break

                            # return ''
                        # if sbc_number != 20 and sbc_number != 36:
                        if True:
                            resp2 = use_cloud_scraper(target_link)
                            # soup = BeautifulSoup(resp.content, "html.parser")
                            soup2 = BeautifulSoup(resp2, "html.parser")
                            player_versions = soup2.find(class_="player-versions")
                            try:
                                pversions = player_versions.find_all(class_="pversion")
                                if pversions:
                                    for pversion in pversions:
                                        a_elem = pversion.find('a')
                                        print(a_elem['data-level'], a_elem['data-rare-type'])
                                        if a_elem['data-level'] == 'gold' and int(a_elem['data-rare-type']) <= 1:
                                            print('####### another gold card founded')
                                            bad_player = 1
                                            break
                                else:
                                    print('player hasnt any other card')
                            except:
                                print('player hasnt any other card')
                            player_club_tag = soup2.find(class_="info_club")
                            player_club_name = player_club_tag.parent.text[1:]

                        if bad_player:
                            break
                        player_price, updated_time = get_price_from_futbin_and_futwiz(player_asset_id)
                        update_time_is_ok = 1
                        # update_time_is_ok = 0
                        # try:
                        #     if updated_time.find('secs') != -1:
                        #         update_time_is_ok = 1
                        #     elif updated_time.find('mins') != -1:
                        #         updated_time_min = updated_time.split()
                        #         if int(updated_time_min[0]) < 31:
                        #             update_time_is_ok = 1
                        # except:
                        #     print traceback.format_exc()
                        if not update_time_is_ok:
                            print(updated_time)
                            print('updated time is more than defined')
                            bad_player = 1
                            break
                        targets_list.append(
                            [player_asset_id, player_position, player_price, player_club, player_rare_type,
                             player_rating, player_club_name])
                        time.sleep(1)
                    if bad_player:
                        print('its not a good solution')
                        continue
                    print('len(targets_list) = ', len(targets_list))
                    if len(targets_list) == 11:

                        count = 0
                        for target in targets_list:
                            player_name = get_player_fifa_name_by_id(target[0])
                            print('player name = ', player_name)
                            need_to_create = 0
                            try:
                                sbc_target, created = SBCTarget.objects.get_or_create(sbc_type=sbc_type,
                                                                                      position=count)
                            except:
                                need_to_create = 1

                            player_card, created = PlayerCard.objects.get_or_create(
                                asset_id=target[0], price=target[2], position=target[1], team=target[3],
                                rare=target[4], update_time=timezone.localtime() - timedelta(hours=1),
                                name=player_name, rating=target[5], team_name=target[6])
                            if need_to_create:
                                sbc_target, created = SBCTarget.objects.get_or_create(
                                    sbc_type=sbc_type, position=count, player=player_card)
                            sbc_target.asset_id = target[0]
                            sbc_target.price = target[2]
                            sbc_target.pos = target[1]
                            sbc_target.team = target[3]
                            sbc_target.rare = target[4]
                            sbc_target.rating = target[5]
                            sbc_target.team_name = target[6]
                            sbc_target.player = player_card

                            sbc_target.name = player_name

                            sbc_target.save()
                            sum_sbc_price = SBCTarget.objects.filter(sbc_type=sbc_type).aggregate(
                                sum_price=Sum('price')).get('sum_price')
                            print('sum actual price =', sum_sbc_price)
                            sbc_type.refresh_from_db()
                            sbc_type.sbc_actual_price = sum_sbc_price
                            sbc_type.save()
                            # cursor2.execute('update sbc_targets set asset_id = %s , price = %s , pos = %s , club_id = %s where \
                            #  sbc_id = %s and position = %s',
                            #                 (target[0], target[2], target[1], target[3], sbc_id, count))
                            count += 1
                        sbc_type.refresh_from_db()
                        sbc_type.sbc_link = link
                        sbc_type.sbc_price = squad_price + 2000
                        sbc_type.console_cant_use = False
                        sbc_type.console_can_use = False
                        sbc_type.save()
                        print('new squad price = ', squad_price + 2000)
                        # cursor2.execute('update sbc set sbc_link = %s where id = %s ', (link, sbc_id))
                        # conn2.commit()
                        # # if sbc_max_price < squad_price + 1000:
                        # cursor2.execute('update sbc set sbc_price = %s where id = %s ', (squad_price + 1500, sbc_id))
                        # conn2.commit()
                        print('sbc id %s updated' % sbc_id)
                        return 'updated'
                    else:
                        print('some thing wrong')
                        print('targets_list = ', targets_list)
                else:
                    print('no enough likes or no price')
            return 'okkkkkk'
    return ''

# update_sbc_from_futbin(20,False,sbc_id=44,certain_link='https://www.futbin.com/22/squad/100224353/sbc')
# get_sbc_solving_times()
# sum_produced_coin()
def run_console_sbc_manager():
    base_dir_file = open(os.path.join(BASE_DIR, 'path.txt'), 'r')
    base_dir = base_dir_file.read()
    order = '"C:\Windows\explorer.exe" ' + os.path.join(base_dir, 'run_program.cmd')
    print(order)
    os.system(order)





