from bs4 import BeautifulSoup
import requests
from random import randint
from threading import Thread
from proxy_checking import ProxyChecker
from datetime import datetime
class ProxyManager:
    def __init__(self, padet, proxythreading, uid, proxyfiyat, proxyparabirimi):
        self.threading(proxythreading, padet, uid, proxyfiyat, proxyparabirimi)
    def GetProxy(self):
        url = 'https://free-proxy-list.net/'
        r = requests.get(url)
        soup = BeautifulSoup(r.content, 'html.parser')
        div = soup.find('div', class_='table-responsive')
        tbody = div.find("tbody")
        proxies = tbody.find_all("tr")
        proxy = proxies[randint(0, len(proxies) - 1)]
        proxy_ip = proxy.find_all("td")[0].get_text()
        proxy_port = proxy.find_all("td")[1].get_text()
        return proxy_ip + ":" + proxy_port
    def proxycreating(self, padet, threadsayi, uid, proxyfiyat, proxyparabirimi):
        proxy_filename = f"proxies_{uid}.txt"
        
        while True:
            count = int(padet)
            for i in range(1, count + 1):
                try:
                    proxy = self.GetProxy()
                    checker = ProxyChecker()
                    r = checker.check_proxy(f'http://{proxy}')
                    print(r['status'])
                    
                    if r['status'] == True:
                        print(f"{i}. Thread: {threadsayi} Uid : {uid} Proxy : {proxy}")
                        self.save_to_file(proxy_filename, proxy)
                    else:
                        print(f"Thread: {threadsayi} uid : {uid} Proxy : {proxy} HATALI!")
                except:
                    print(f"Thread: {threadsayi} uid : {uid} Proxy : {proxy} HATALI!")
    def threading(self, pthreading, padet, uid, proxyfiyat, proxyparabirimi):
        for i in range(1, int(pthreading) + 1):
            t1 = Thread(target=self.proxycreating, args=(padet, i, uid, proxyfiyat, proxyparabirimi))
            t1.start()
    def save_to_file(self, filename, proxy):
        with open(filename, 'a') as file:
            file.write(proxy + '\n')
ProxyManager(padet=200, proxythreading=5, uid=2, proxyfiyat=2, proxyparabirimi='USD')