#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
Диагностический тест для выявления проблем с таблицами
"""

import os
import subprocess
import tempfile

SORTER_PASCAL = "/usr/bin/sortucs4"
SORTER_C = "./sortucs4"

def test_single_line(sorter_path):
    """Тест одного файла с подробным выводом"""
    print(f"\n--- Тест файла с одной строкой: {sorter_path} ---")
    
    test_file = tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False, encoding='utf-8')
    test_file.write("single line only")
    test_file.close()
    
    print(f"Создан файл: {test_file.name}")
    print(f"Содержимое: 'single line only'")
    
    # Запускаем сортировщик
    result = subprocess.run([sorter_path, test_file.name], 
                          capture_output=True, text=True)
    
    print(f"Код возврата: {result.returncode}")
    print(f"STDOUT: {repr(result.stdout)}")
    print(f"STDERR: {repr(result.stderr)}")
    
    # Читаем результат
    with open(test_file.name, 'r', encoding='utf-8') as f:
        content = f.read().strip()
    
    print(f"Результат в файле: {repr(content)}")
    
    os.unlink(test_file.name)
    return content == "single line only"

def test_table_debug(sorter_path):
    """Диагностика сортировки таблиц"""
    print(f"\n--- Диагностика таблиц: {sorter_path} ---")
    
    # Создаем простую таблицу
    table_data = [
        "Name\tAge\tCity",
        "Bob\t30\tNYC",
        "Alice\t25\tLA",
        "Charlie\t35\tChicago"
    ]
    
    test_file = tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False, encoding='utf-8')
    test_file.write('\n'.join(table_data))
    test_file.close()
    
    print("Исходная таблица:")
    for line in table_data:
        print(f"  {line}")
    
    # Сортируем по 2-му столбцу (Age)
    print(f"\nЗапуск: {sorter_path} {test_file.name} 2")
    result = subprocess.run([sorter_path, test_file.name, "2"], 
                          capture_output=True, text=True)
    
    print(f"Код возврата: {result.returncode}")
    if result.stdout:
        print(f"STDOUT: {repr(result.stdout)}")
    if result.stderr:
        print(f"STDERR: {repr(result.stderr)}")
    
    # Читаем результат
    with open(test_file.name, 'r', encoding='utf-8') as f:
        sorted_content = [line.rstrip('\n') for line in f.readlines()]
    
    print("\nРезультат сортировки:")
    for line in sorted_content:
        print(f"  {line}")
    
    # Ожидаемый результат
    expected = [
        "Name\tAge\tCity",
        "Alice\t25\tLA",
        "Bob\t30\tNYC",
        "Charlie\t35\tChicago"
    ]
    
    print("\nОжидалось:")
    for line in expected:
        print(f"  {line}")
    
    print(f"\nСовпадает: {sorted_content == expected}")
    
    os.unlink(test_file.name)
    return sorted_content == expected

def test_table_custom_delimiter_debug(sorter_path):
    """Диагностика таблиц с пользовательским разделителем"""
    print(f"\n--- Диагностика таблиц (разделитель '|'): {sorter_path} ---")
    
    table_data = [
        "Name|Age|City",
        "Bob|30|NYC",
        "Alice|25|LA",
        "Charlie|35|Chicago"
    ]
    
    test_file = tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False, encoding='utf-8')
    test_file.write('\n'.join(table_data))
    test_file.close()
    
    print("Исходная таблица:")
    for line in table_data:
        print(f"  {line}")
    
    # Сортируем по 1-му столбцу (Name)
    print(f"\nЗапуск: {sorter_path} {test_file.name} 1 '|'")
    result = subprocess.run([sorter_path, test_file.name, "1", "|"], 
                          capture_output=True, text=True)
    
    print(f"Код возврата: {result.returncode}")
    if result.stdout:
        print(f"STDOUT: {repr(result.stdout)}")
    if result.stderr:
        print(f"STDERR: {repr(result.stderr)}")
    
    # Читаем результат
    with open(test_file.name, 'r', encoding='utf-8') as f:
        sorted_content = [line.rstrip('\n') for line in f.readlines()]
    
    print("\nРезультат сортировки:")
    for line in sorted_content:
        print(f"  {line}")
    
    # Ожидаемый результат
    expected = [
        "Name|Age|City",
        "Alice|25|LA",
        "Bob|30|NYC",
        "Charlie|35|Chicago"
    ]
    
    print("\nОжидалось:")
    for line in expected:
        print(f"  {line}")
    
    print(f"\nСовпадает: {sorted_content == expected}")
    
    os.unlink(test_file.name)
    return sorted_content == expected

if __name__ == "__main__":
    print("=" * 60)
    print("ДИАГНОСТИЧЕСКИЙ ТЕСТ")
    print("=" * 60)
    
    for sorter, name in [(SORTER_PASCAL, "Pascal"), (SORTER_C, "C")]:
        print(f"\n{'='*60}")
        print(f"Тестирование {name} версии: {sorter}")
        print(f"{'='*60}")
        
        if os.path.exists(sorter):
            test_single_line(sorter)
            test_table_debug(sorter)
            test_table_custom_delimiter_debug(sorter)
        else:
            print(f"Файл не найден: {sorter}")