import openpyxl
from openpyxl.styles import Alignment, Border, Side, PatternFill
from openpyxl.styles.colors import Color

def create_excel_table(data, filename="table2.xlsx"):
    """
    주어진 데이터를 기반으로 엑셀 테이블을 생성하고, 코멘트 부분을 통합 및 외부 윤곽선을 추가하고,
    엔티티 타입 명 (논리) 부분에 회색 음영을 적용합니다.

    Args:
        data (list): 테이블 데이터를 담고 있는 리스트
        filename (str): 생성할 엑셀 파일 이름
    """

    # 엑셀 워크북 생성
    workbook = openpyxl.Workbook()
    sheet = workbook.active

    # 데이터 작성
    for row_idx, row_data in enumerate(data, start=1):
        for col_idx, cell_data in enumerate(row_data, start=1):
            cell = sheet.cell(row=row_idx, column=col_idx, value=cell_data)
            cell.alignment = Alignment(horizontal='center', vertical='center')

    # 코멘트 부분 셀 병합 및 외부 윤곽선 추가
    sheet.merge_cells("E1:E3")  # E1부터 E3까지 셀 병합
    sheet.cell(row=1, column=5).value = "코멘트"  # 병합된 셀에 "코멘트" 입력
    sheet.cell(row=1, column=5).alignment = Alignment(horizontal='center', vertical='center') # 가운데 정렬

    # 외부 윤곽선 스타일 정의
    border_style = Border(
        left=Side(border_style='thin'),
        right=Side(border_style='thin'),
        top=Side(border_style='thin'),
        bottom=Side(border_style='thin')
    )

    # 병합된 셀에 외부 윤곽선 적용
    for row in sheet["E1:E3"]:
        for cell in row:
            cell.border = border_style

    # 나머지 셀에 외부 윤곽선 적용
    for row in sheet["A1:D3"]:
        for cell in row:
            cell.border = border_style

    # 엔티티 타입 명 (논리) 부분에 회색 음영 적용
    gray_fill = PatternFill(start_color='D3D3D3', end_color='D3D3D3', fill_type='solid')  # 회색 음영 스타일 정의
    for row in sheet["A1:A3"]:  # A1부터 B1까지 셀 선택
        for cell in row:
            cell.fill = gray_fill  # 회색 음영 적용

    # 열 너비 자동 조정
    for column_cells in sheet.columns:
        length = max(len(str(cell.value)) for cell in column_cells)
        sheet.column_dimensions[column_cells[0].column_letter].width = length + 2

    # 파일 저장
    workbook.save(filename)
    print(f"엑셀 파일 '{filename}'이 생성되었습니다.")

# 테이블 데이터
table_data = [
    ["엔티티 타입 명 (논리)", "회원", "작성일", "2025-03-26", ""],  # 코멘트 열 추가
    ["테이블 명 (물리)", "T_MBR_ACNT", "작성자", "홍길동", "기존 테이블 : 회원"],
    ["테이블 설명", "회원", "", "", ""]  # 코멘트 열 추가
]

# 엑셀 파일 생성
create_excel_table(table_data)