import catppuccin

# pylint: disable=C0111
from qutebrowser.config.configfiles import ConfigAPI  # noqa: F401
from qutebrowser.config.config import ConfigContainer  # noqa: F401

# fmt: off
config: ConfigAPI = config  # type: ConfigAPI # noqa: F821 pylint: disable=E0602,C0103 # pyright: ignore
c: ConfigContainer = c  # type: ConfigContainer # noqa: F821 pylint: disable=E0602,C0103 # pyright: ignore
# fmt: on

# load autoconfig values
config.load_autoconfig()

# load catppuccin theme
catppuccin.setup(c, "Machiatto", True)

# load custom configs
config.source("pyconfig/redirectors.py")

##-- Dark Mode Settings --##
c.colors.webpage.preferred_color_scheme = "dark"
c.colors.webpage.darkmode.enabled = True
c.colors.webpage.bg = "black"
c.colors.webpage.darkmode.algorithm = "lightness-cielab"
c.colors.webpage.darkmode.threshold.foreground = 150
c.colors.webpage.darkmode.threshold.background = 100
c.colors.webpage.darkmode.policy.images = "never"
# c.colors.webpage.darkmode.grayscale.images = 0.35

# change startpage and default page
c.url.start_pages = ["https://startpage.cronyakatsuki.xyz"]
c.url.default_page = "https://startpage.cronyakatsuki.xyz"

# search engines
c.url.searchengines = {
    "DEFAULT": "https://searx.cronyakatsuki.xyz/?q={}",
    "aw": "https://wiki.archlinux.org/?search={}",
    "re": "https://www.reddit.com/r/{}",
    "w": "https://en.wikipedia.org/wiki/{}",
    "y": "https://www.youtube.com/results?search_query={}",
}

##-- Fingerprinting settings --##
c.content.headers.user_agent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.3"
c.content.headers.accept_language = "en-US,en;q=0.5"
c.content.headers.custom = {
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
}
c.content.canvas_reading = False
c.content.webgl = False
c.content.webrtc_ip_handling_policy = "default-public-interface-only"
c.content.geolocation = False
c.content.javascript.enabled = False
c.content.notifications.enabled = False
c.content.cookies.accept = "never"
c.content.private_browsing = False

##-- AdBLock Settings --##
c.content.blocking.method = "both"
c.content.blocking.adblock.lists = [
    "https://easylist.to/easylist/easylist.txt",
    "https://easylist.to/easylist/easyprivacy.txt",
    "https://secure.fanboy.co.nz/fanboy-annoyance.txt",
    "https://easylist-downloads.adblockplus.org/abp-filters-anti-cv.txt",
    "https://www.i-dont-care-about-cookies.eu/abp/",
]


# History disable
c.completion.web_history.max_items = 0
c.completion.cmd_history_max_items = 0

##-- Devtool Settings --##
with config.pattern("chrome-devtools://*") as s:
    s.content.cookies.accept = "all"
    s.content.images = True
    s.content.javascript.enabled = True

with config.pattern("devtools://*") as s:
    s.content.cookies.accept = "all"
    s.content.images = True
    s.content.javascript.enabled = True

with config.pattern("chrome://*/*") as s:
    s.content.javascript.enabled = True

with config.pattern("qute://*/*") as s:
    s.content.javascript.enabled = True

##-- Site settings --##
with config.pattern("https://searx.cronyakatsuki.xyz/*") as s:
    s.content.cookies.accept = "all"
with config.pattern("https://monkeytype.com") as s:
    s.content.javascript.enabled = True
    s.content.cookies.accept = "all"
with config.pattern("https://piped.cronyakatsuki.xyz/*") as s:
    s.content.javascript.enabled = True
    s.content.cookies.accept = "all"


##-- Aliases --##
c.aliases = config.get("aliases")
c.aliases["buku"] = "spawn --userscript buku"

##-- Bindings --##
# launch with mpv
config.bind(",m", "spawn mpv {url}")
config.bind(",fm", "hint links spawn mpv {hint-url}")

# buku bundings
config.bind("b", "buku open")
config.bind("B", "buku open -t")
config.bind(",ba", "buku add")
config.bind(",be", "buku edit")
config.bind(",bd", "buku delete")
config.bind(",bfa", "hint links spawn --userscript buku add {hint-url}")

# yt-dlp
config.bind(",y", "spawn --userscript yt-dlp")
config.bind(",fy", "hint links userscript yt-dlp")

# search current selection
config.bind(",fo", "open {primary}")
config.bind(",fO", "open --tab {primary}")

# yank found url
config.bind("yf", "hint links yank")

# fix escape
config.bind(
    "<Escape>", "mode-leave ;; jseval -q document.activeElement.blur()", mode="insert"
)

# fix scrolling
config.bind("j", "jseval --quiet scrollHelper.scrollBy(50)")
config.bind("k", "jseval --quiet scrollHelper.scrollBy(-50)")
config.bind("<Ctrl-D>", "jseval --quiet scrollHelper.scrollPage(0.8)")
config.bind("<Ctrl-U>", "jseval --quiet scrollHelper.scrollPage(-0.8)")
config.bind("gg", "jseval --quiet scrollHelper.scrollTo(0)")
config.bind("G", "jseval --quiet scrollHelper.scrollToPercent(100)")

# KeePassXC binding
config.bind('pw', 'spawn --userscript qute-keepassxc --key crony@cronyakatsuki.xyz')

# remove clickbard and gdpr banners
config.bind(
    "ek",
    "jseval (function () { "
    + '  var i, elements = document.querySelectorAll("body *");'
    + ""
    + "  for (i = 0; i < elements.length; i++) {"
    + "    var pos = getComputedStyle(elements[i]).position;"
    + '    if (pos === "fixed" || pos == "sticky") {'
    + "      elements[i].parentNode.removeChild(elements[i]);"
    + "    }"
    + "  }"
    + "})();",
)

##-- Font Settings --##
c.fonts.default_family = '"Dejavu Sans Mono"'
c.fonts.default_size = "10pt"
c.fonts.completion.entry = 'default_size "default_family"'
c.fonts.debug_console = 'default_size "default_family"'
c.fonts.prompts = "default_size default_family"
c.fonts.statusbar = 'default_size "default_family"'

##-- FilePicker (nnn on crrack)--##
fileselect_cmd = [
    "alacritty",
    "--class",
    "filepicker,filepicker",
    "-e",
    "tmux",
    "new",
    "-s",
    "filepicker",
    "env",
    "LC_COLLATE=C",
    "nnn",
    "-P",
    "p",
    "-p",
    "{}",
]
c.fileselect.handler = "external"
c.fileselect.folder.command = fileselect_cmd
c.fileselect.single_file.command = fileselect_cmd
c.fileselect.multiple_files.command = fileselect_cmd