#!/usr/bin/env python

import sys
from random import choice, gauss
from textwrap import dedent
from time import time_ns

import click
from termstr import error

QUOTES: list[str] = [
    """\
    诶多 …… ☆ 是 ♡ 同 ♡ 类 ♡ 呢 ♡ 喵 ♪（由乃逆光捧脸.jpg）
    那群八嘎是不会懂的呀 …… 关于「二次元の美好」♡
    呐，如果说吾の存在有意义的话、那一定是因为「二·次·元」吧 ☆ ？
    所以呢 —— 妄图污染这份「爱」的人类、都会被吾「抹」「杀」「掉」喔 ♪
    （小声）嘛 …… 讨厌二次元的八嘎三次元最恶心了啊魂淡！★
    """,
    """\
    呐、二次元の民那 …… 都·是·最·最·善·良·の·存·在·呐 ☆
    多洗忒 …… 要「嘲笑」这样的孩子呢？吾辈不明白啊 ——
    嘛 …… 说到底，你们都只是污秽の「来自三次元的大人」吧？
    大人什么的、最·讨·厌·了 ★ ♪
    """,
    """\
    啊嘞啊嘞 QAQ？多洗忒 …… 欧尼酱 ww？
    呐、桥豆麻袋 …… 已经「厌烦」吾辈了嘛？
    哼唧 …… 真是「冷·酷·の·人」呢 QuQ —— ☆(๑°⌓°๑)
    嘛 …… 即便是这样的瓦塔西，一定也是有「存·在·の·意·义」的吧、内 ~ ★
    快来「肯定」啊？不然呀 …… 咱可就要「黑化」了哦 ♪ 呐？
    """,
    """\
    呐。。。（伸出的小手又迅速垂下去）
    嗦嘎（表情有点失落），米娜桑已经不喜欢了呀（紧咬嘴唇）
    得磨，米娜桑忘了当初吗（握紧小手）
    莫以得丝（强忍住眼泪），已经大丈夫了呦（挤出笑脸）
    瓦大喜瓦，滋多滋多，滋多滋多（语气越来越用力了）滋多戴斯给！！！
    一滋嘛叠磨瓦撕裂嘛赛！！！至死都不会瓦斯裂嘛斯（认真的表情）
    """,
    """\
    诶多 …… 看起来阁下对于「二·次·元」の理解、似·乎·满·是·谬·误·哦 ☆ ~
    嘛，连最为基本の「礼♪义♪廉♪耻♪」都早已失去了啊 …… ♪（笑）
    呐，我说啊 —— 这样の kimino、也有自称「二 ♡ 次 ♡ 元」の资格吗 ★ ？
    fufufu —— 说到底、阁下已经「二·次·元·失·格」了吧？呐 ~ ♪
    """,
    """\
    唔噗噗 ~ 汝等「劣·等·生·物」...... 也配去「妄想」吗？
    呐、「真正的二次元」什么的 —— 吾辈看汝是一点都不懂啊 ☆（笑）
    嘛嘛嘛 ...... 不过看着汝试图伪装成「二次元」の可笑姿态，
    倒是让吾辈对于「三·次·元·的·白·痴」稍微有了些许兴趣哦？★
    """,
    """\
    哼！（跺了跺粉嫩的小脚，肉嘟嘟的小手交叉摆在胸前，小嘴一撅，
    头抬得高高的撇向一边，一副生人勿近的模样。又怕你真的离开，偷偷侧过脑袋看你）
    """,
    """\
    喜欢你啊！八嘎！
    为什么察觉不到啊，八嘎八嘎八嘎，最讨人厌啦。
    但又是那么喜欢你，suki，suki，daisuki。
    笨蛋，再多看看我啊！毕竟人家，最喜欢你了啊。
    """,
]


@click.command()
@click.option(
    "--mean",
    show_default=True,
    default=8.0,
    help="The mean time (in milliseconds) taken to type a single character.",
)
@click.option(
    "--stddev",
    show_default=True,
    default=64.0,
    help="The standard deviation (in milliseconds) of the time taken to type a single character.",
)
def thus_saith_my_waifu(mean: float, stddev: float) -> None:
    if mean < 0:
        error("the mean time must be non-negative")
        sys.exit(1)
    if stddev < 0:
        error("the standard deviation must be non-negative")
        sys.exit(1)

    quote = dedent(choice(QUOTES))

    start = time_ns()
    for char in quote:
        duration = gauss(mean * 1e6, stddev * 1e6)
        while time_ns() - start < duration:
            pass
        print(char, end="", flush=True)
        start = time_ns()


if __name__ == "__main__":
    thus_saith_my_waifu()
