02 file\file="""
fp = open('path1', 'r')
line = fp.readline()
fp.write("abc\n")
fp.close()
"""

01 import\error_check="""
import os
import sys
import traceback
import tkinter.messagebox as msgbox

missing = []
err = ""
for lib in ["chardet", "configparser", "tkinter", "ttkbootstrap"]:
    try:
        __import__(lib)
    except ImportError:
        missing.append(lib)
        err += "\n" + traceback.format_exc()

if missing:
    msgbox.showerror("ライブラリエラー", 
         f"以下のライブラリが不足しています:\n{', '.join(missing)}"
       + "\n\n詳細:\n{err}")
    sys.exit(1)

import chardet
import configparser
import tkinter as tk
import ttkbootstrap
from tkinter import filedialog, simpledialog
from ttkbootstrap import Window
from ttkbootstrap.widgets import Treeview
"""

01 import\__import__="""
missing = []
for lib in ["pydub", "whisper"]:
    try:
        __import__(lib)
    except ImportError:
        missing.append(lib)
if missing:
    print(f"Error: Missing libraries:\n{', '.join(missing)}")
    print(f"  pip install whiosper pydub PyAudio")
    print(f"  install ffmpeg from https://ffmpeg.org/download.html and add to PATH")
    print(f"    Linux: apt update; apt install ffmpeg; apt-get install python3-dev libasound-dev")
    print(f"    macOS: brew install ffmpeg portaudio")
    input("\nPress ENTER to terminate>>\n")
    sys.exit(1)
"""

01 import\__import__/tkinter="""
missing = []
for lib in ["chardet", "configparser", "tkinter", "ttkbootstrap"]:
    try:
        __import__(lib)
    except ImportError:
        missing.append(lib)

if missing:
    msgbox.showerror("ライブラリエラー", f"以下のライブラリが不足しています:\n{', '.join(missing)}")
    sys.exit(1)
"""

03 pandas\pandas="""
    df = pd.read_excel(infile, header = None)

    labels = df.iloc[1, 1:].tolist()
    data = df.iloc[2:, 1:].values

    data_df = pd.DataFrame(data, columns = labels)

    pd.options.display.float_format = '{:.5g}'.format
    print(data_df)

    labels = data_df.columns.tolist()
    data_list = data_df.values.tolist()
    ndata = data_df.shape[0]
    V_list   = [data_list[i][0] for i in range(ndata)]
    C_list   = [data_list[i][1] for i in range(ndata)]


    print(f"Save data to {cparams.outfile}")
    df = pd.DataFrame({'V (V)': V, 'W (nm)': np.array(W) * 1.0e9)
    df.to_excel(cparams.outfile, index = False)
"""

04 import\dotenv="""
try:
    from dotenv import load_dotenv
except:
    print("\nError to ijmport dotenv")
    input("Install: pip install dotenv\n")
"""

04 import\pyperclip="""
try:
    import pyperclip
except:
    print("\nError to import pyperclip")
    input("Install: pip install pyperclip\n")
"""

04 import\pyttsx3="""
try:
    import pyttsx3
except:
    print("\nError to ijmport pyttsx3")
    input("Install: pip install pyttsx3\n")
"""

04 import\tklib="""
v = os.environ.get('tklibPath', None)
if v:
    pythonlib_path = v
else:
    script_path = sys.argv[0]
    tkProg_Root  = os.path.join(script_path, '../../..')
    pythonlib_path  = os.path.abspath(os.path.join(tkProg_Root, 'tklib/python'))

print(f"Add [{pythonlib_path}] to PYTHONPATH by sys.path.append()")
sys.path.append(pythonlib_path)

try:
    import tklib.tkimport as imp
except Exception as e:
    print()
    print("######################################################################")
    print("###########  ERROR ERROR ERROR ERROR ERROR ERROR #####################")
    print("######################################################################")
    print(f"# Failed to import [tklib.tkimport] module ({e}).")
    print(f"#  Add [tkProg]{os.sep}tklib{os.sep}python to PYTHONPATH variable")
    print(f"#  Current PYTHONPATH:", sys.path)
    print("######################################################################")
    input("Press ENTER to terminate>>")
    exit()
"""

01 global\argparse="""
import argparse

    parser = argparse.ArgumentParser(description="Clipboard to speech tool")
    parser.add_argument("infile", type=str, help="入力音声ファイル名")
    parser.add_argument("--outfile", "-o", type=str, default="", required=False, help="出力音声ファイル")
    parser.add_argument("--list",    "-l", action="store_true", help="利用可能な voices を表示して終了")

    args = parser.parse_args()


"""


05 ai\global="""
try:
    import google.generativeai as genai
    from openai import OpenAI
except ImportError:
    print("必要なライブラリがインストールされていません。", file=sys.stderr)
    print("pip install google-generativeai openai python-dotenv を実行してください。", file=sys.stderr)
    input("\nPress ENTER to terminate>>\n")
    sys.exit(1)

from tkai_lib import read_ai_config
from tkai_lib import query_openai4, openai_response_to_json
from tkai_lib import query_openai5, openai5_response_to_json, extract_openai5_text
from tkai_lib import query_google, google_response_to_json


    read_ai_config('ai.env')
    args.openai_key = os.getenv("OPENAI_API_KEY")
    args.gemini_key = os.getenv("GOOGLE_API_KEY")

def generate_doc_openai5(inp: str, code: str, program_type: str = '') -> str:
    instructions, prompt = get_prompt(inp, code, program_type)
    response = query_openai5(prompt, openai_model5, openai_api_key = OPENAI_API_KEY, 
                    instructions = instructions, role = None, store = False,
                     effort = reasoning_effort, max_output_tokens = max_tokens)
    if not response: return False
    if response == {}: return {}

    text = extract_openai5_text(response)

    return text

def generate_doc_openai(inp: str, code: str, program_type: str = '') -> str:
    role, prompt = get_prompt(inp, code, program_type)
    response = query_openai4(prompt, openai_model, openai_api_key = OPENAI_API_KEY,
                    role = role, temperature = 0, max_tokens = max_tokens)
    return response.choices[0].message.content

def generate_doc_google(inp: str, code: str, program_type: str = '') -> str:
    role, prompt = get_prompt(inp, code, program_type)
    response = query_google(prompt, google_model, role = role, google_api_key = GOOGLE_API_KEY)
    if not response: return False
    if response == {}: return {}

    return response.text

"""
