import os, json
from langchain.document_loaders import GitbookLoader
from urllib.parse import urlparse
from datetime import datetime
from alive_progress import alive_it
from .utils import tokenize
from uuid import uuid4

def gitbook():
  url = input("Enter the URL of the GitBook you want to collect: ")
  if(url == ''):
    print("Not a gitbook URL")
    exit(1)

  primary_source = urlparse(url)
  output_path = f"./outputs/gitbook-logs/{primary_source.netloc}"
  transaction_output_dir = f"../server/storage/documents/gitbook-{primary_source.netloc}"

  if os.path.exists(output_path) == False:os.makedirs(output_path)
  if os.path.exists(transaction_output_dir) == False: os.makedirs(transaction_output_dir)
  loader = GitbookLoader(url, load_all_paths= primary_source.path in ['','/'])
  for doc in alive_it(loader.load()):
    metadata = doc.metadata
    content = doc.page_content
    source = urlparse(metadata.get('source'))
    name = 'home' if source.path in ['','/'] else source.path.replace('/','_')
    output_filename = f"doc-{name}.json"
    transaction_output_filename = f"doc-{name}.json"
    data = {
      'id': str(uuid4()),
      'url': metadata.get('source'),
      "title": metadata.get('title'),
      "description": metadata.get('title'),
      "published": datetime.today().strftime('%Y-%m-%d %H:%M:%S'),
      "wordCount": len(content),
      'pageContent': content,
      'token_count_estimate': len(tokenize(content))
    }

    with open(f"{output_path}/{output_filename}", 'w', encoding='utf-8') as file:
      json.dump(data, file, ensure_ascii=True, indent=4)

    with open(f"{transaction_output_dir}/{transaction_output_filename}", 'w', encoding='utf-8') as file:
      json.dump(data, file, ensure_ascii=True, indent=4)