"""
script for news fetching (by keywords)
"""
__author__ = "Florian Kellermann, Linus Eickhoff"
__date__ = "15.03.2022"
__version__ = "0.0.1" 
__license__ = "None"

import sys
import os
import json
import requests

from newsapi import NewsApiClient
from dotenv import load_dotenv

load_dotenv()

# Init
api_key = os.getenv('NEWS_API_KEY')
newsapi = NewsApiClient(api_key=api_key)
source_json = requests.get(f"https://newsapi.org/v2/top-headlines/sources?apiKey={api_key}&language=en").json()
sources = source_json["sources"]
str_sources = ",".join([source["id"] for source in sources])
    

def get_top_news_by_keyword(keyword):
    """get top news to keyword
    Args:
        keyword (String): keyword for search

    Returns:
        JSON/dict: dict containing articles
    """    
    top_headlines = newsapi.get_top_headlines(q=keyword, sources=str_sources, language='en')
    return top_headlines

def format_article(article):
    """format article for messaging (using markdown syntax)

    Args:
        article (dict): article to format for messaging

    Returns:
        String: formatted article
    """    
    sourcename = article["source"]["name"]
    headline = article["title"]
    url = article["url"]
    formatted_article = f"_{sourcename}_\n*{headline}*\n\n{url}"

    return formatted_article

if __name__ == '__main__':

    print("fetching top news by keyword business...")
    
    articles = get_top_news_by_keyword("bitcoin")
    formatted_article = format_article(articles["articles"][0])
    print(formatted_article)