import os
import openpyxl
from openpyxl.styles import Alignment

SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
FILE_NAME = os.path.join(SCRIPT_DIR, "registration_for_training.xlsx")

def fix_shifted_rows():
    if not os.path.exists(FILE_NAME):
        print(f"Файл {FILE_NAME} не найден.")
        return

    try:
        wb = openpyxl.load_workbook(FILE_NAME)
        ws = wb.active
    except PermissionError:
        print("\n[ОШИБКА] Доступ запрещен. Пожалуйста, ЗАКРОЙТЕ файл 'registration_for_training.xlsx' в Excel или других программах и запустите скрипт снова.\n")
        return
    except Exception as e:
        print(f"Ошибка при загрузке файла: {e}")
        return

    rows = list(ws.iter_rows(values_only=False))
    if len(rows) <= 1:
        print("В таблице нет данных для исправления (только заголовки).")
        return

    changed = False
    for i in range(1, len(rows)):
        row_num = i + 1
        id_val = ws.cell(row=row_num, column=1).value
        
        # If the first cell doesn't start with 'id_', it means this row was written
        # by the old running server process and needs to be shifted to the right.
        if id_val and not str(id_val).startswith("id_"):
            print(f"Исправляем смещение в строке {row_num} для пользователя: '{id_val}'")
            
            # Read the 8 fields that were written by the old server
            old_values = [ws.cell(row=row_num, column=c).value for c in range(1, 9)]
            
            # Re-format this row: Column 1 is id_001, columns 2-9 are the shifted fields
            ws.cell(row=row_num, column=1, value="id_001")
            for col_idx, val in enumerate(old_values, 2):
                ws.cell(row=row_num, column=col_idx, value=val)
                
            # Clear column 10 in case there is any residue
            ws.cell(row=row_num, column=10, value=None)

            # Re-apply styles and alignments
            data_align_left = Alignment(horizontal="left", vertical="center")
            data_align_center = Alignment(horizontal="center", vertical="center")
            
            for col_idx in range(1, 10):
                cell = ws.cell(row=row_num, column=col_idx)
                if col_idx in [2, 4, 5]:
                    cell.alignment = data_align_left
                else:
                    cell.alignment = data_align_center
                    
            changed = True

    if changed:
        try:
            wb.save(FILE_NAME)
            print("\n[УСПЕХ] Все смещенные строки в Excel были автоматически исправлены!")
            print(f"Файл успешно сохранен: {FILE_NAME}\n")
        except PermissionError:
            print("\n[ОШИБКА] Не удалось сохранить файл. Пожалуйста, убедитесь, что файл закрыт в Excel, и попробуйте снова.\n")
    else:
        print("Смещенных строк не обнаружено. Все данные соответствуют формату.")

if __name__ == "__main__":
    fix_shifted_rows()
