from BunnyCDN.Storage import Storage
import config
import hashlib
import os

def file_hash(filename, hash_algo='sha256'):
    """
    Compute the hash of a file.

    :param filename: Path to the file.
    :param hash_algo: Hashing algorithm to use (e.g., 'sha256', 'md5').
    :return: Hexadecimal hash string.
    """
    h = hashlib.new(hash_algo)

    with open(filename, 'rb') as file:
        while chunk := file.read(8192):
            h.update(chunk)

    return h.hexdigest()


#obj_storage = Storage('577cb82d-8176-4ccf-935ce0a574bf-fe4c-4012', 'altpins')
obj_storage = Storage('345697f9-d9aa-4a6b-a5ec8bffc16d-ceaf-453e', 'storysave')

db, cursor = config.gen_connection()

cursor.execute("SELECT id, media_id, media_url FROM media WHERE hash IS NULL;")
results = cursor.fetchall()

count = 0
print(f"Found {len(results)} files to process.")

for result in results:
    count += 1
    serverPath = result[2].replace("https://storysave.b-cdn.net/", '').replace('//', '/').replace('\\', '/')

    localFilePath = os.path.join(os.getcwd(), 'temp', os.path.basename(serverPath))
    if not os.path.exists(localFilePath):
        obj_storage.DownloadFile(storage_path=serverPath, download_path=os.path.join(os.getcwd(), 'temp'))

    filehash = file_hash(localFilePath)

    cursor.execute("UPDATE media SET hash = %s WHERE id = %s;", (filehash, result[0]))
    db.commit()

    print(f"[{count}/{len(results)}] {result[1]}: {filehash}, {cursor.rowcount}")