import sys
import os
from PyQt5.QtWidgets import (
    QApplication, QMainWindow, QWidget, QVBoxLayout, QLabel, 
    QTableWidget, QTableWidgetItem, QHeaderView
)
from PyQt5.QtCore import Qt

class DirectoryManager(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("디렉토리 정보 추출")
        self.resize(800, 600)
        
        # 중앙 위젯 및 레이아웃 설정
        central_widget = QWidget()
        self.setCentralWidget(central_widget)
        layout = QVBoxLayout(central_widget)
        
        # 드래그 앤 드롭 안내 레이블
        self.info_label = QLabel("디렉토리를 이곳에 드래그 앤 드롭하세요.")
        self.info_label.setAlignment(Qt.AlignCenter)
        layout.addWidget(self.info_label)
        
        # 테이블 위젯 설정 (6개 컬럼: 이름, 타입, 날짜, 작품, EP, SEQ)
        self.table = QTableWidget()
        self.table.setColumnCount(6)
        self.table.setHorizontalHeaderLabels(['이름', '타입', '날짜', '작품', 'EP', 'SEQ'])
        header = self.table.horizontalHeader()
        header.setSectionResizeMode(QHeaderView.Stretch)
        layout.addWidget(self.table)
        
        # 드래그 앤 드롭 활성화
        self.setAcceptDrops(True)
    
    def dragEnterEvent(self, event):
        if event.mimeData().hasUrls():
            event.accept()
        else:
            event.ignore()
    
    def dropEvent(self, event):
        urls = event.mimeData().urls()
        for url in urls:
            path = url.toLocalFile()
            # 디렉토리인 경우에만 처리
            if os.path.isdir(path):
                info = self.extract_directory_info(path)
                self.add_info_to_table(info)
            else:
                print(f"{path}는 디렉토리가 아닙니다. 무시합니다.")
    
    def extract_directory_info(self, path):
        """
        주어진 디렉토리 경로에서 아래 정보를 추출합니다.
          - 이름: 디렉토리의 기본 이름
          - 타입: 경로에 'upload'가 포함되면 '임포트', 아니면 '익스포트'
          - 날짜: 경로 중 '202'로 시작하는 폴더 이름 (예: 2023-04-25)
          - 작품: 날짜 뒤에 오는 폴더 이름 (존재하는 경우)
          - EP: 작품 폴더에서 숫자만 추출 (예: 에피소드 번호)
          - SEQ: 디렉토리 내의 하위 디렉토리 리스트 (콤마로 구분)
        """
        # 경로를 os.sep 기준으로 분리
        parts = os.path.normpath(path).split(os.sep)
        
        # 이름: 디렉토리의 베이스 네임
        name = os.path.basename(path)
        
        # 타입: 경로에 "upload"가 있으면 "임포트", 없으면 "익스포트"
        if "upload" in path.lower():
            type_info = "임포트"
        else:
            type_info = "익스포트"
        
        # 날짜와 작품 추출 (경로에서 '202'로 시작하는 부분을 날짜로 가정)
        date = ""
        work = ""
        for i, part in enumerate(parts):
            if part.startswith("202"):
                date = part
                if i + 1 < len(parts):
                    work = parts[i + 1]
                break
        
        # EP: 작품 이름에서 숫자만 추출
        ep = "".join(filter(str.isdigit, work))
        
        # SEQ: 디렉토리 내의 하위 디렉토리 이름들을 콤마로 구분하여 문자열로 변환
        try:
            subdirs = [
                d for d in os.listdir(path)
                if os.path.isdir(os.path.join(path, d))
            ]
            seq = ", ".join(subdirs)
        except Exception as e:
            seq = ""
            print(f"SEQ 추출 중 오류 발생: {e}")
        
        return {
            '이름': name,
            '타입': type_info,
            '날짜': date,
            '작품': work,
            'EP': ep,
            'SEQ': seq
        }
    
    def add_info_to_table(self, info):
        """추출한 정보를 테이블의 새 행으로 추가합니다."""
        row = self.table.rowCount()
        self.table.insertRow(row)
        self.table.setItem(row, 0, QTableWidgetItem(info.get('이름', '')))
        self.table.setItem(row, 1, QTableWidgetItem(info.get('타입', '')))
        self.table.setItem(row, 2, QTableWidgetItem(info.get('날짜', '')))
        self.table.setItem(row, 3, QTableWidgetItem(info.get('작품', '')))
        self.table.setItem(row, 4, QTableWidgetItem(info.get('EP', '')))
        self.table.setItem(row, 5, QTableWidgetItem(info.get('SEQ', '')))

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = DirectoryManager()
    window.show()
    sys.exit(app.exec_())
