import json

from .fixtures import *

def test_list_json(process, disable_extractors_dict):
    subprocess.run(["archivebox", "add", "http://127.0.0.1:8080/static/example.com.html", "--depth=0"],
                                  capture_output=True, env=disable_extractors_dict)
    list_process = subprocess.run(["archivebox", "list", "--json"], capture_output=True)
    output_json = json.loads(list_process.stdout.decode("utf-8"))
    assert output_json[0]["url"] == "http://127.0.0.1:8080/static/example.com.html"


def test_list_json_headers(process, disable_extractors_dict):
    subprocess.run(["archivebox", "add", "http://127.0.0.1:8080/static/example.com.html", "--depth=0"],
                                  capture_output=True, env=disable_extractors_dict)
    list_process = subprocess.run(["archivebox", "list", "--json", "--with-headers"], capture_output=True)
    output_json = json.loads(list_process.stdout.decode("utf-8"))
    assert output_json["links"][0]["url"] == "http://127.0.0.1:8080/static/example.com.html"

def test_list_html(process, disable_extractors_dict):
    subprocess.run(["archivebox", "add", "http://127.0.0.1:8080/static/example.com.html", "--depth=0"],
                                  capture_output=True, env=disable_extractors_dict)
    list_process = subprocess.run(["archivebox", "list", "--html"], capture_output=True)
    output_html = list_process.stdout.decode("utf-8")
    assert "<footer>" not in output_html
    assert "http://127.0.0.1:8080/static/example.com.html" in output_html

def test_list_html_headers(process, disable_extractors_dict):
    subprocess.run(["archivebox", "add", "http://127.0.0.1:8080/static/example.com.html", "--depth=0"],
                                  capture_output=True, env=disable_extractors_dict)
    list_process = subprocess.run(["archivebox", "list", "--html", "--with-headers"], capture_output=True)
    output_html = list_process.stdout.decode("utf-8")
    assert "<footer>" in output_html
    assert "http://127.0.0.1:8080/static/example.com.html" in output_html

def test_list_csv(process, disable_extractors_dict):
    subprocess.run(["archivebox", "add", "http://127.0.0.1:8080/static/example.com.html", "--depth=0"],
                                  capture_output=True, env=disable_extractors_dict)
    list_process = subprocess.run(["archivebox", "list", "--csv", "url"], capture_output=True)
    output_csv = list_process.stdout.decode("utf-8")
    assert "http://127.0.0.1:8080/static/example.com.html" in output_csv

def test_list_csv_headers(process, disable_extractors_dict):
    subprocess.run(["archivebox", "add", "http://127.0.0.1:8080/static/example.com.html", "--depth=0"],
                                  capture_output=True, env=disable_extractors_dict)
    list_process = subprocess.run(["archivebox", "list", "--csv", "url", "--with-headers"], capture_output=True)
    output_csv = list_process.stdout.decode("utf-8")
    assert "http://127.0.0.1:8080/static/example.com.html" in output_csv
    assert "url" in output_csv

def test_list_index_with_wrong_flags(process):
    list_process = subprocess.run(["archivebox", "list", "--with-headers"], capture_output=True)
    assert "--with-headers can only be used with --json, --html or --csv options" in list_process.stderr.decode("utf-8")

def test_link_sort_by_url(process, disable_extractors_dict):
    subprocess.run(["archivebox", "add", "http://127.0.0.1:8080/static/iana.org.html", "--depth=0"],
                                  capture_output=True, env=disable_extractors_dict)
    subprocess.run(["archivebox", "add", "http://127.0.0.1:8080/static/example.com.html", "--depth=0"],
                                  capture_output=True, env=disable_extractors_dict)

    list_process = subprocess.run(["archivebox", "list"], capture_output=True)
    link_list = list_process.stdout.decode("utf-8").split("\n")
    assert "http://127.0.0.1:8080/static/iana.org.html" in link_list[0]

    list_process = subprocess.run(["archivebox", "list", "--sort=url"], capture_output=True)
    link_list = list_process.stdout.decode("utf-8").split("\n")
    assert "http://127.0.0.1:8080/static/example.com.html" in link_list[0]