import requests
import pandas as pd
import json
import os
from dotenv import load_dotenv

# Load environment variables
load_dotenv()
API_KEY = os.getenv('API_KEY_ETHERSCAN')
URL_ETHERSCAN = os.getenv('URL_ETHERSCAN')

def get_token_transactions(address, action):
    params = {
        'module': 'account',
        'action': action,  # tokentx for ERC20, tokennfttx for ERC721, token1155tx for ERC1155
        'address': address,
        'startblock': 0,
        'endblock': 99999999,
        'sort': 'asc',
        'apikey': API_KEY
    }
    response = requests.get(URL_ETHERSCAN, params=params)
    if response.status_code == 200:
        data = response.json()
        return data['result']
    else:
        print(f"Error fetching transactions for address {address} with action {action}")
        return []

def combine_token_transactions(address):
    erc20_transactions = get_token_transactions(address, 'tokentx')
    #erc721_transactions = get_token_transactions(address, 'tokennfttx')
    #erc1155_transactions = get_token_transactions(address, 'token1155tx')

    combined_transactions = erc20_transactions #+ erc721_transactions + erc1155_transactions
    return combined_transactions

def save_transactions_to_csv(transactions, influencer_name):
    df = pd.DataFrame(transactions)
    df.to_csv(f"output/interactions_{influencer_name}.csv", index=False)

if __name__ == "__main__":
    # Load influencers
    with open("ressources/dict_influencers_addr.json", "r") as file:
        influencers = json.load(file)

    # Extract and save interactions for all influencers
    for name, address in influencers.items():
        transactions = combine_token_transactions(address)
        save_transactions_to_csv(transactions, name)