import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

def generate_contributing_section(repo_owner, repo_name, target_dir_relative, filename, language):
    repo_url = f"https://github.com/{repo_owner}/{repo_name}"
    if language == "zh":
        contributing_section = f"""
{{/*
Contributing Section
DO NOT edit this section!
It will be automatically generated by the script.
*/}}

<CardGroup cols="2">
    <Card
        title="编辑此页面"
        icon="pen-to-square"
        href="{repo_url}/edit/main/{target_dir_relative}/{filename}"
    >
        通过直接提交修改来帮助改进文档内容
    </Card>
    <Card
        title="提交问题"
        icon="github"
        href="{repo_url}/issues/new?title=文档问题%3A%20{filename[5:-7]}&body=%23%23%20问题描述%0A%3C%21--%20请简要描述您发现的问题%20--%3E%0A%0A%23%23%20页面链接%0Ahttps%3A%2F%2Fgithub.com%2F{repo_owner}%2F{repo_name}%2Fblob%2Fmain%2F{target_dir_relative}%2F{filename}%0A%0A%23%23%20建议修改%0A%3C%21--%20如果有具体的修改建议，请在此说明%20--%3E%0A%0A%3C%21--%20感谢您对文档质量的关注！%20--%3E"
    >
        发现错误或有改进建议？请提交问题反馈
    </Card>
</CardGroup>
"""
    elif language == "en":
        contributing_section = f"""
{{/*
Contributing Section
DO NOT edit this section!
It will be automatically generated by the script.
*/}}

<CardGroup cols="2">
    <Card
        title="Edit this page"
        icon="pen-to-square"
        href="{repo_url}/edit/main/{target_dir_relative}/{filename}"
    >
        Help improve our documentation by contributing directly
    </Card>
    <Card
        title="Report an issue"
        icon="github"
        href="{repo_url}/issues/new?title=Documentation%20Issue%3A%20{filename[5:-7]}&body=%23%23%20Issue%20Description%0A%3C%21--%20Please%20briefly%20describe%20the%20issue%20you%20found%20--%3E%0A%0A%23%23%20Page%20Link%0Ahttps%3A%2F%2Fgithub.com%2F{repo_owner}%2F{repo_name}%2Fblob%2Fmain%2F{target_dir_relative}%2F{filename}%0A%0A%23%23%20Suggested%20Changes%0A%3C%21--%20If%20you%20have%20specific%20suggestions%20for%20changes%2C%20please%20describe%20them%20here%20--%3E%0A%0A%3C%21--%20Thank%20you%20for%20helping%20improve%20our%20documentation%21%20--%3E"
    >
        Found an error or have suggestions? Let us know
    </Card>
</CardGroup>
"""
    elif language == "jp":
        contributing_section = f"""
{{/*
Contributing Section
DO NOT edit this section!
It will be automatically generated by the script.
*/}}

<CardGroup cols="2">
    <Card
        title="このページを編集する"
        icon="pen-to-square"
        href="{repo_url}/edit/main/{target_dir_relative}/{filename}"
    >
        直接貢献することでドキュメントの改善にご協力ください
    </Card>
    <Card
        title="問題を報告する"
        icon="github"
        href="{repo_url}/issues/new?title=ドキュメントの問題%3A%20{filename[5:-7]}&body=%23%23%20問題の説明%0A%3C%21--%20発見した問題について簡単に説明してください%20--%3E%0A%0A%23%23%20ページリンク%0Ahttps%3A%2F%2Fgithub.com%2F{repo_owner}%2F{repo_name}%2Fblob%2Fmain%2F{target_dir_relative}%2F{filename}%0A%0A%23%23%20提案される変更%0A%3C%21--%20特定の変更案がある場合は、ここで説明してください%20--%3E%0A%0A%3C%21--%20ドキュメントの品質向上にご協力いただきありがとうございます！%20--%3E"
    >
        エラーを見つけたり提案がありますか？お知らせください
    </Card>
</CardGroup>
"""
    else:
        raise ValueError("Unsupported language. Supported languages are 'zh', 'en', and 'jp'.")

    return contributing_section

def append_content_to_files(
    target_dir_relative, repo_owner, repo_name, language, base_dir=BASE_DIR, file_extension=".mdx"
):
    target_path = os.path.join(base_dir, target_dir_relative)
    

    if not os.path.isdir(target_path):
        print(f"Error: Directory '{target_path}' not found.")
        return
    fix_md_endings(target_dir_relative, base_dir, file_extension)
    appended_count = 0
    error_count = 0
    for filename in os.listdir(target_path):
        if filename.endswith(file_extension):
            filepath = os.path.join(target_path, filename)
            try:
                # Open in text append mode to write
                with open(filepath, "a", encoding="utf-8") as f:
                    f.write(generate_contributing_section(repo_owner, repo_name, target_dir_relative, filename, language))
                appended_count += 1
            except (IOError, OSError) as e:
                print(f"Error processing file {filepath}: {e}")
                error_count += 1
    print(
        f"Finished processing directory '{target_path}'. "
        f"Appended to {appended_count} files. Encountered {error_count} errors."
    )

def remove_contributing_section(target_dir_relative, base_dir=BASE_DIR, file_extension=".mdx"):
    import re
    target_path = os.path.join(base_dir, target_dir_relative)
    if not os.path.isdir(target_path):
        print(f"Error: Directory '{target_path}' not found.")
        return
    removed_count = 0
    error_count = 0
    for filename in os.listdir(target_path):
        if filename.endswith(file_extension):
            filepath = os.path.join(target_path, filename)
            try:
                with open(filepath, "r", encoding="utf-8") as f:
                    content = f.read()
                pattern = re.compile(r"\{/\*[\s\S]*?Contributing Section[\s\S]*?</CardGroup>", re.DOTALL)
                new_content = re.sub(pattern, "", content, count=1)
                if new_content != content:
                    with open(filepath, "w", encoding="utf-8") as f:
                        f.write(new_content)
                    removed_count += 1
            except (IOError, OSError) as e:
                print(f"Error processing file {filepath}: {e}")
                error_count += 1
    fix_md_endings(target_dir_relative, base_dir, file_extension)
    print(f"Removed from {removed_count} files. Encountered {error_count} errors.")

def fix_md_endings(target_dir_relative, base_dir=BASE_DIR, file_extension=".mdx"):
    target_path = os.path.join(base_dir, target_dir_relative)
    if not os.path.isdir(target_path):
        print(f"Error: Directory '{target_path}' not found.")
        return
    fixed_count = 0
    error_count = 0
    for filename in os.listdir(target_path):
        if filename.endswith(file_extension):
            filepath = os.path.join(target_path, filename)
            try:
                with open(filepath, "r", encoding="utf-8") as f:
                    content = f.read()
                processed_content = content.replace("\r\n", "\n")
                processed_content = processed_content.rstrip()
                processed_content += "\n"
                if processed_content != content:
                    with open(filepath, "w", encoding="utf-8") as f:
                        f.write(processed_content)
                    fixed_count += 1
            except (IOError, OSError) as e:
                print(f"Error processing file {filepath}: {e}")
                error_count += 1
    print(f"Fixed line endings and trailing lines in {fixed_count} files. Encountered {error_count} errors.")

if __name__ == "__main__":
    # test
    target_dir_relative = "test"
    language = "zh" # "zh", "en", "jp"
    repo_name = "dify-docs-plugin-dev"
    repo_owner = "alterxyz"
    append_content_to_files(
        target_dir_relative="plugin-dev-en",
        repo_owner="alterxyz",
        repo_name="dify-docs-plugin-dev",
        language="en"
    )
    append_content_to_files(
        target_dir_relative="plugin-dev-zh",
        repo_owner="alterxyz",
        repo_name="dify-docs-plugin-dev",
        language="zh"
    )