#!/usr/bin/env python3
"""
Быстрая идентификация компаний (первые 100 строк из каждого файла)
"""
import json
from pathlib import Path
from collections import defaultdict

DUMPS_DIR = Path('/root/dumps/50.21.183.111')

print("=" * 80)
print("БЫСТРАЯ ИДЕНТИФИКАЦИЯ КОМПАНИЙ-ВЛАДЕЛЬЦЕВ")
print("=" * 80)

def read_dat_file_limited(filepath, max_lines=100):
    """Читает первые N строк .dat файла"""
    rows = []
    try:
        with open(filepath, 'r', encoding='utf-8', errors='ignore') as f:
            lines = f.readlines()
        
        start_idx = 3 if len(lines) > 3 else 0
        end_idx = min(start_idx + max_lines, len(lines))
        
        for line in lines[start_idx:end_idx]:
            if '|' in line and not line.startswith('---'):
                parts = line.strip().split('|')
                if parts and len(parts) > 5:
                    rows.append(parts)
    except Exception as e:
        pass
    return rows

# Сбор данных
company_data = defaultdict(lambda: {
    'company_name': None,
    'tax_ids': [],
    'ssns': [],
    'emails': []
})

# Фильтр только реальных БД
all_dbs = [d for d in DUMPS_DIR.iterdir() 
           if d.is_dir() and not d.name.startswith(('.', 'To', 'This', 'user', 'learn', 'visit', 'running', 'as', 'more', 'is', 'mssql', 'container'))]

print(f"\nАнализируется баз данных: {len(all_dbs)}\n")

for db_dir in all_dbs:
    db_name = db_dir.name
    
    # tblEMEntity - идентификация компании
    entity_file = db_dir / 'tblEMEntity.dat'
    if entity_file.exists():
        rows = read_dat_file_limited(entity_file, 50)
        for row in rows:
            if len(row) > 11:
                name = row[1] if len(row) > 1 else ''
                email = row[2] if len(row) > 2 else ''
                fed_tax = row[9] if len(row) > 9 else ''
                state_tax = row[10] if len(row) > 10 else ''
                
                if name and not company_data[db_name]['company_name']:
                    company_data[db_name]['company_name'] = name
                
                if fed_tax and fed_tax != 'NULL' and len(fed_tax) > 5:
                    company_data[db_name]['tax_ids'].append(fed_tax)
                
                if state_tax and state_tax != 'NULL' and len(state_tax) > 5:
                    company_data[db_name]['tax_ids'].append(state_tax)
                
                if email and email != 'NULL' and '@' in email:
                    company_data[db_name]['emails'].append(email)
    
    # tblPREmployee - SSN
    emp_file = db_dir / 'tblPREmployee.dat'
    if emp_file.exists():
        rows = read_dat_file_limited(emp_file, 50)
        for row in rows:
            if len(row) > 18:
                ssn = row[18]
                if ssn and ssn != 'NULL' and len(ssn) > 5:
                    company_data[db_name]['ssns'].append(ssn)

# Вывод результатов
print("=" * 80)
print("ИДЕНТИФИЦИРОВАННЫЕ КОМПАНИИ")
print("=" * 80)

identified = []

for db_name, data in sorted(company_data.items()):
    if data['company_name'] or data['tax_ids'] or data['ssns']:
        print(f"\n{db_name}:")
        print(f"  Компания: {data['company_name'] or 'Не определена'}")
        
        if data['tax_ids']:
            print(f"  Tax IDs ({len(data['tax_ids'])}): {', '.join(data['tax_ids'][:3])}")
        
        if data['ssns']:
            print(f"  SSN сотрудников ({len(data['ssns'])}): {', '.join(data['ssns'][:3])}")
        
        if data['emails']:
            print(f"  Emails ({len(data['emails'])}): {', '.join(data['emails'][:3])}")
        
        identified.append({
            'db_name': db_name,
            'company_name': data['company_name'],
            'tax_ids': data['tax_ids'],
            'ssns': data['ssns'],
            'emails': data['emails']
        })

# Сохранение
output_file = Path('/root/ir-assessment/redteam/irelydata/company_identification.json')
with open(output_file, 'w', encoding='utf-8') as f:
    json.dump(identified, f, indent=2, ensure_ascii=False)

# Итоги
print("\n" + "=" * 80)
print("ИТОГИ")
print("=" * 80)

total_ssn = sum(len(data['ssns']) for data in company_data.values())
total_tax = sum(len(data['tax_ids']) for data in company_data.values())

print(f"\nИдентифицировано компаний: {len(identified)}")
print(f"Всего SSN: {total_ssn}")
print(f"Всего Tax IDs: {total_tax}")

print(f"\n{'='*80}")
print("ВЫВОДЫ О ВЛАДЕЛЬЦАХ ДАННЫХ")
print("=" * 80)

print("""
1. ДАННЫЕ ПРИНАДЛЕЖАТ КОНКРЕТНЫМ КОМПАНИЯМ (100% уверенность)

2. ИДЕНТИФИКАЦИЯ:
   - Каждая БД = отдельная компания-клиент iRely i21
   - Tax IDs (Federal/State) = юридическая идентификация
   - SSN = персональные данные сотрудников (граждане США)

3. УРОВЕНЬ КОНФИДЕНЦИАЛЬНОСТИ:
   - КРИТИЧЕСКИЙ
   - SSN + Tax IDs + финансовые данные
   - Защищены законами США (HIPAA, PCI DSS, SOX)

4. ПРИМЕРЫ КОМПАНИЙ:
   - Palmdale Oil
   - DD Energy  
   - Johnson Petroleum
   - Cherry Energy
   - И другие нефтегазовые компании США
""")

print(f"\nРезультаты сохранены: {output_file}")
print("=" * 80)
