import os
import zipfile

# list.txt에서 파일명을 읽어오는 함수
def read_file_list():
    list_file = os.path.join(os.getcwd(), 'list.txt')
    if not os.path.isfile(list_file):
        raise ValueError(f"'{list_file}'은(는) 파일이 아니거나 존재하지 않습니다.")

    try:
        with open(list_file, 'r', encoding='utf-8') as f:
            return [line.strip() for line in f.readlines() if line.strip()]
    except FileNotFoundError:
        print(f"'{list_file}' 파일이 존재하지 않습니다.")
        return []

# 특정 폴더에서 파일을 검색하고 압축하는 함수
def zip_selected_files(folder_path, file_list, output_zip):
    with zipfile.ZipFile(output_zip, 'w') as zipf:
        for file_name in file_list:
            # 확장자를 .txt로 고정
            file_name_with_ext = f"{file_name}.txt"

            file_path = os.path.join(folder_path, file_name_with_ext)
            if os.path.exists(file_path):
                print(f"압축 중: {file_name_with_ext}")
                zipf.write(file_path, arcname=file_name_with_ext)
            else:
                print(f"파일을 찾을 수 없거나 지원되지 않는 파일 형식입니다: {file_name_with_ext}")
    print(f"완료: '{output_zip}' 파일이 생성되었습니다.")

# /app/idrac_info/backup/ 폴더 내 폴더를 나열하고 사용자 선택 받는 함수
def select_folder():
    base_path = "/data/app/idrac_info/data/backup/"
    if not os.path.isdir(base_path):
        raise ValueError(f"기본 경로 '{base_path}'이(가) 존재하지 않습니다.")

    folders = [f for f in os.listdir(base_path) if os.path.isdir(os.path.join(base_path, f))]
    if not folders:
        raise ValueError(f"'{base_path}'에 폴더가 존재하지 않습니다.")

    print("사용 가능한 폴더:")
    for idx, folder in enumerate(folders, start=1):
        print(f"{idx}. {folder}")

    choice = int(input("원하는 폴더의 번호를 선택하세요: ").strip())
    if choice < 1 or choice > len(folders):
        raise ValueError("올바른 번호를 선택하세요.")

    return os.path.join(base_path, folders[choice - 1])

# 주요 실행 코드
if __name__ == "__main__":
    try:
        # /app/idrac_info/backup/ 폴더 내에서 폴더 선택
        folder_path = select_folder()

        output_zip_name = input("생성할 zip 파일명을 입력하세요 (확장자 제외, 예: output): ").strip()

        # zip 파일 경로를 현재 디렉토리로 설정
        output_zip = os.path.join(os.getcwd(), f"{output_zip_name}.zip")

        # 파일명 리스트 가져오기
        file_list = read_file_list()

        if not file_list:
            print("list.txt에 파일명이 없습니다.")
        else:
            zip_selected_files(folder_path, file_list, output_zip)
    except ValueError as e:
        print(e)
