import json
import os
from urllib.parse import quote

from spider import Spider


def generate_readme(result):
    md_table_cn = [item['md_table_row_cn'] for item in result]
    md_table_en = [item['md_table_row_en'] for item in result]

    # generate README.md
    items = []
    table_cn = '\n|  题号  |  题解  |  标签  |  难度  | 备注 |\n| --- | --- | --- | --- | --- |'
    for item in sorted(md_table_cn, key=lambda x: x[0]):
        items.append(
            f'\n|  {item[0]}  |  {item[1]}  |  {item[2]}  |  {item[3]}  |  {item[4]}  |'
        )
    table_cn += ''.join(items)

    with open('./readme_template.md', 'r', encoding='utf-8') as f:
        readme_cn = f.read()
    with open('./README.md', 'w', encoding='utf-8') as f:
        f.write(readme_cn.format(table_cn))

    # generate README_EN.md
    items = []
    table_en = '\n|  #  |  Solution  |  Tags  |  Difficulty  |  Remark |\n| --- | --- | --- | --- | --- |'
    for item in sorted(md_table_en, key=lambda x: x[0]):
        items.append(
            f'\n|  {item[0]}  |  {item[1]}  |  {item[2]}  |  {item[3]}  |  {item[4]}  |'
        )
    table_en += ''.join(items)

    with open('./readme_template_en.md', 'r', encoding='utf-8') as f:
        readme_en = f.read()
    with open('./README_EN.md', 'w', encoding='utf-8') as f:
        f.write(readme_en.format(table_en))


def generate_question_readme(result):
    with open('./problem_readme_template.md', 'r', encoding='utf-8') as f:
        readme_cn = f.read()
    with open('./problem_readme_template_en.md', 'r', encoding='utf-8') as f:
        readme_en = f.read()
    with open('./sql_problem_readme_template.md', 'r', encoding='utf-8') as f:
        sql_readme_cn = f.read()
    with open('./sql_problem_readme_template_en.md', 'r', encoding='utf-8') as f:
        sql_readme_en = f.read()
    with open('./bash_problem_readme_template.md', 'r', encoding='utf-8') as f:
        bash_readme_cn = f.read()
    with open('./bash_problem_readme_template_en.md', 'r', encoding='utf-8') as f:
        bash_readme_en = f.read()

    for item in result:
        if not item['content_cn'] and not item['content_en']:
            continue
        path = (
            f'./{item["sub_folder"]}/{item["frontend_question_id"]}.{item["title_en"]}'
        )
        path = path.replace(":", " ")
        if os.path.isdir(path):
            continue
        os.makedirs(path)
        # choose the readme template
        category = item['category']
        if category == 'Shell':
            readme_template_cn = bash_readme_cn
            readme_template_en = bash_readme_en
        elif category == 'Database':
            readme_template_cn = sql_readme_cn
            readme_template_en = sql_readme_en
        else:
            readme_template_cn = readme_cn
            readme_template_en = readme_en

        # generate lc-cn problem readme
        with open(f'{path}/README.md', 'w', encoding='utf-8') as f1:
            f1.write(
                readme_template_cn.format(
                    int(item['frontend_question_id']),
                    item["title_cn"],
                    item['url_cn'],
                    item['relative_path_en'],
                    item['content_cn'],
                )
            )

        # generate lc-en problem readme
        with open(f'{path}/README_EN.md', 'w', encoding='utf-8') as f2:
            f2.write(
                readme_template_en.format(
                    int(item['frontend_question_id']),
                    item["title_en"],
                    item['url_en'],
                    item['relative_path_cn'],
                    item['content_en'],
                )
            )


def generate_summary(result):
    """generate summary files"""
    summary_cn = ''
    summary_en = ''
    m = {int(item['frontend_question_id']): item for item in result}
    for file in os.listdir('./'):
        if os.path.isdir("./" + file) and file != '__pycache__':
            summary_cn += f'\n- {file}\n'
            summary_en += f'\n- {file}\n'
            for sub in os.listdir('./' + file):
                sub = sub.replace('`', ' ')
                enc = quote(sub)

                data = m.get(int(sub[:4]))
                sub_cn = sub
                if data:
                    sub_cn = sub[:5] + data['title_cn']

                summary_cn += f'  - [{sub_cn}](/solution/{file}/{enc}/README.md)\n'
                summary_en += f'  - [{sub}](/solution/{file}/{enc}/README_EN.md)\n'

    # generate summary.md
    with open('./summary.md', 'w', encoding='utf-8') as f:
        f.write(summary_cn)

    # generate summary_en.md
    with open('./summary_en.md', 'w', encoding='utf-8') as f:
        f.write(summary_en)


def save(result):
    with open('./result.json', 'w', encoding='utf-8') as f:
        f.write(json.dumps(result))


if __name__ == '__main__':
    cn = ''
    en = ''
    spider = Spider(cn, en)
    res = spider.run()
    generate_readme(res)
    generate_question_readme(res)
    generate_summary(res)
    save(res)