"""
概要: CIFファイルから結晶構造を読み込み、pymatgenを用いて対称化し、結果をCIFファイルとして出力するスクリプト。

詳細説明:
本スクリプトは、pymatgenライブラリのSpacegroupAnalyzerを使用して、入力されたCIFファイルから結晶構造を読み込み、
その構造を高い対称性を持つ形式に変換（対称化）します。対称化の際には、symprecパラメータによって
原子座標や格子定数の許容誤差を調整できます。
対称化された構造は、新しいCIFファイルとして指定されたパスに保存されます。
コマンドライン引数により、入力ファイル、出力ファイル、symprec値、および終了時の一時停止オプションを設定できます。

関連リンク: :doc:`symmetrize_pymatgen_usage`

:param argv[1]: infile (str)
    対称化する結晶構造が記述された入力CIFファイルのパス。
:param argv[2]: outfile (str, optional)
    対称化された構造を保存する出力CIFファイルのパス。
    指定されない場合、入力ファイル名に基づいて自動生成されます（例: "input.cif" -> "input-symmetrized.cif"）。
:param argv[3]: prec (float, optional)
    対称性を検出するための許容誤差 (symprec)。PymatgenのSpacegroupAnalyzerに渡されます。
    デフォルト値は 1.0e-3 です。
:param argv[4]: pause (int, optional)
    スクリプト終了時にユーザーがEnterキーを押すまで一時停止するかどうかを制御します。
    1を設定すると一時停止し、0を設定すると一時停止しません。デフォルト値は 0 です。

:returns: None
    このスクリプトは直接値を返しませんが、指定されたパスに新しいCIFファイルを生成します。
"""
import os
import sys
from pymatgen.core.structure import Structure
from pymatgen.symmetry.analyzer import SpacegroupAnalyzer
from pymatgen.io.cif import CifWriter, CifParser


infile = None
prec = 1.0e-3
pause = 0

argv = sys.argv
narg = len(argv)
if narg >= 2:
    infile = argv[1]
if narg >= 3:
    outfile = argv[2]
elif infile is not None:
    dir_path = os.path.dirname(infile)
    filebody, ext = os.path.splitext(infile)
    outfile = os.path.join(dir_path, f"{filebody}-symmetrized.cif")
if narg >= 4:
    prec = float(argv[3])
if narg >= 5:
    pause = int(argv[4])


def main():
    print()
    print(f"infile: {infile}")
    print(f"outfile: {outfile}")
    print(f"prec: {prec}")

    struct = Structure.from_file(infile, primitive = False)
    print()
    print("input structure:")
    print(struct)

    symmetry_analyzer = SpacegroupAnalyzer(struct, symprec = prec) #, angle_tolerance = 5.0)
    symmetrized_structure = symmetry_analyzer.get_symmetrized_structure()
    print()
    print("symmetrized_structure:")
    print(symmetrized_structure)

    print()
    print(f"Save the symmetrized structure to [{outfile}]")
    writer = CifWriter(symmetrized_structure, symprec = prec) #, angle_tolerance = 5.0)
    writer.write_file(outfile)

    if pause: input("\nPress ENTER to terminate>>\n")


if __name__ == '__MAIN__':
    main()
        