import os
import base64
from pathlib import Path

from custom_apps.FEATURE_VECTOR_SIMILARITY_FAISS.const import *

def search_glass_parts(image_path_list):
    result = []
    
    for image_path in image_path_list:
        
        if image_path is None:
            result.append(None)
            continue
        elif not os.path.exists(image_path):
            result.append(None)
            continue
        
        parts_path = Path(os.path.join(os.path.dirname(os.path.dirname(image_path)),ImageDepths.parts))
        parts_files_generator = parts_path.rglob('*.png')

        parts_list = []
        # parts_list = [str(p.resolve()) for p in parts_files_generator] # 풀경로
        
        for p in parts_files_generator:
            # name,ext = os.path.splitext(p.name)
            parts_list.append(p.name)
        result.append(parts_list)
    
    return result

def file_name_to_parts(file_path):
    """
    파일경로로 파츠이름 파싱

    :param file_path: 파일경로
    :return: 파츠이름
    """
    filename, ext = os.path.splitext(os.path.basename(file_path))
    
    name_list = filename.split('_')
    
    result = name_list[2:][0]
        
    return result


def get_base64_bytes(data: str) -> bytes:
    """
    문자열을 검사하여 유효한 Base64라면 디코딩된 bytes 데이터를 반환하고,
    그렇지 않으면 ValueError 예외를 발생시킵니다.
    """

    try:
        # 1. 입력 문자열 전처리 (공백 제거 등)
        stripped_data = data.strip()
        
        # 2. bytes로 인코딩 (b64decode는 bytes-like object를 필요로 함)
        encoded_input = stripped_data.encode('ascii')
        
        # 3. Base64 디코딩 수행 (validate=True로 엄격한 검사)
        # 성공 시 b'...' 형태의 바이트 데이터가 생성됨
        decoded_bytes = base64.b64decode(encoded_input, validate=True)
        
        return decoded_bytes
        
    except Exception as e:
        # Base64 형식이 아니거나 패딩 오류 등 발생 시
        raise ValueError(f"유효한 Base64 데이터가 아닙니다. 변환 불가: {e}")

if __name__ == '__main__':
    print(file_name_to_parts(os.path.join(FAISS_VECTOR_PATH,"Glass_001",ImageDepths.parts,"Glass_001_Temple_L.png")))