# -*- coding: utf-8 -*-
"""검수완료 시 엑셀 결과영역 Y/Z/AA 일괄 작성.
사용:  python -X utf8 _fill_YZAA.py <엑셀경로> <YYYY-MM-DD> <담당자> [--write]
  Y  완료여부(Y,N)  = "Y"          (모든 데이터 행)
  Z  확인 날짜       = 검수일(datetime, yyyy-mm-dd 표시)
  AA 수집 담당자     = 담당자(프리랜서1/프리랜서2)
- 데이터 행 판별: B열(순번)이 정수인 행만(3행~). 트레일링 빈행/잡행 제외.
- 인자 없이/--write 없이 실행하면 dry-run(채울 행수만 출력).
- --write 시 백업 *_backup_YZAA전.xlsx 생성 후 기입. 기존 셀 스타일·테두리 보존(값/표시형식만 변경).
"""
import sys
import datetime
import openpyxl
from openpyxl.styles import Alignment

YCOL, ZCOL, AACOL = 25, 26, 27  # Y, Z, AA


def main():
    if len(sys.argv) < 4:
        print('usage: _fill_YZAA.py <xlsx> <YYYY-MM-DD> <담당자> [--write]')
        return
    path, dstr, who = sys.argv[1], sys.argv[2], sys.argv[3]
    write = '--write' in sys.argv[4:]
    y, m, d = (int(x) for x in dstr.split('-'))
    dt = datetime.datetime(y, m, d)

    wb = openpyxl.load_workbook(path)
    ws = wb.active
    targets = [r for r in range(3, ws.max_row + 1)
               if isinstance(ws.cell(r, 2).value, int)]
    if not targets:
        print('데이터 행 없음(B열 순번 정수 없음) — 중단'); return
    # 이미 채워진 행 수 점검
    pre_y = sum(1 for r in targets if ws.cell(r, YCOL).value not in (None, ''))
    print('데이터 %d행 | 이미 Y채움 %d행 | 날짜=%s 담당자=%s'
          % (len(targets), pre_y, dstr, who))
    if not write:
        print('(dry-run) --write 추가 시 기입'); return

    bak = path.rsplit('.', 1)[0] + '_backup_YZAA전.xlsx'
    wb.save(bak)
    for r in targets:
        cy, cz, ca = ws.cell(r, YCOL), ws.cell(r, ZCOL), ws.cell(r, AACOL)
        cy.value, cz.value, ca.value = 'Y', dt, who
        cz.number_format = 'yyyy-mm-dd'
        for c in (cy, cz, ca):
            c.alignment = Alignment(horizontal='center', vertical='center')
    wb.save(path)
    print('기입 완료: Y/Z/AA %d행 → %s  (백업 %s)' % (len(targets), path, bak))


if __name__ == '__main__':
    main()
