#!/usr/bin/env python3
# -*- coding: utf-8 -*-
""" Author:                     Hendrik Schutter, mail@hendrikschutter.com
    Date of creation:           2022/05/31
    Date of last modification:  2022/05/31
"""

from bs4 import BeautifulSoup
import datetime
from tinydb import TinyDB, Query
import urllib3
import sys
import scrape_listing as sl
import search_eBay as se


if __name__ == "__main__":
    seller_db = TinyDB("seller_db.json")
    database_lenght = len(seller_db.all())
    if database_lenght == 0:
        print("Unable to load seller shop database!")
        sys.exit(-1)
    print("Loaded seller shop database: " + str(database_lenght) + " listings")

    for shop_listing_url in seller_db.all():
        #print(shop_listing_url["epid"])

        for retrieve_counter in range(5): 
            try:
                shop_listing_data = sl.scrape_listing(shop_listing_url["epid"])
                break
            except:
                #pass
                print("Unable to retrieve seller listing data from: " + shop_listing_url["epid"])
            
        if shop_listing_data:
            print("\n\nCompare: " + shop_listing_data["title"] + " | " + str(shop_listing_data["price"]) + "€ | " + shop_listing_url["epid"])

            competitor_listings = se.search(shop_listing_data["title"], 1)  
            print("Found " + str(len(competitor_listings)) + " listings from competitors with term: " + shop_listing_data["title"])  
            sys.stdout.flush()
            cheaper_listings = list()
            for competitor_listing_url in competitor_listings:
                #print(competitor_listing_url)
                #print(shop_listing_url["epid"])

                if seller_db.search(Query().epid == competitor_listing_url):
                #if competitor_listing_url == shop_listing_url["epid"]:
                    print("Found listing from sellers shop --> ignore " + competitor_listing_url)
                    continue
                #else:
                    #print("not from own shop")

                for retrieve_counter_competitor in range(5): 
                    try:
                        #print("scraping : " + competitor_listing_url)
                        competitor_listing_data = sl.scrape_listing(competitor_listing_url)
                        break
                    except:
                        pass
                        #print("Unable to retrieve competitor listing data from: " + competitor_listing_url)

                if competitor_listing_data:
                    #print(competitor_listing_data["price"])
                    if competitor_listing_data["price"] < shop_listing_data["price"]:
                        #print("found cheaper competitor: " + str(competitor_listing_data["price"]) + "€ instead: " + str(shop_listing_data["price"]) + "€ ---> " +  competitor_listing_url)
                        cheaper_listings.append({
        'title': competitor_listing_data["title"],
        'price': competitor_listing_data["price"],
        'url':   competitor_listing_url})

            for cheaper_listing in sorted(cheaper_listings, key=lambda d: d['price']) :
                #print(cheaper_listing)
                print("found cheaper competitor: " + str(cheaper_listing["price"]) + "€ instead: " + str(shop_listing_data["price"]) + "€ ---> " +  cheaper_listing["url"])
        #break