import fs from 'node:fs';
import path from 'node:path';
const sourceRoot='/Users/anna/Desktop/Работа/данные для прототипа/Поисковый запрос 1/Ульяновский автомобильный завод';
const outputRoot=path.join(sourceRoot,'Карточки Бастион');
const read1251=file=>new TextDecoder('windows-1251').decode(fs.readFileSync(file));
const htmlEscape=value=>String(value??'').replace(/[&<>"']/g,char=>({ '&':'&','<':'<','>':'>','"':'"',"'":''' }[char]));
const walk=dir=>fs.readdirSync(dir,{withFileTypes:true}).flatMap(entry=>{
const full=path.join(dir,entry.name);
return entry.isDirectory()?walk(full):[full];
});
const titleOf=file=>{
const match=read1251(file).match(/
]*>([\s\S]*?)<\/title>/i);
const raw=(match?.[1]||path.basename(file,'.html')).replace(/<[^>]*>/g,' ').replace(/\s+/g,' ').trim();
if(raw==='ПАО "НПО "Искра"')return 'ПАО «НПО «Искра»»';
const first=raw.indexOf('"'),last=raw.lastIndexOf('"');
return first>=0&&last>first?`${raw.slice(0,first)}«${raw.slice(first+1,last)}»${raw.slice(last+1)}`:raw;
};
const cleanText=file=>read1251(file).replace(/`;
const nav=(from)=>``;
const section=(id,title,body)=>`${title}
${body}
`;
const financeSvg=(rows)=>{
const values=rows.map(row=>row[1]), profits=rows.map(row=>row[2]), max=Math.max(...values,1), min=Math.min(0,...profits), range=Math.max(max-min,1);
const points=(field)=>rows.map((row,i)=>`${45+i*(430/(Math.max(rows.length-1,1)))},${190-((row[field]-min)/range)*150}`).join(' ');
return `Синий — выручка, млрд руб.; зелёный — чистая прибыль, млрд руб.
`;
};
const generatedFinance=title=>{const base=Array.from(title).reduce((sum,char)=>sum+char.codePointAt(0),0)%12+3;return [[2021,base*.72,-base*.045],[2022,base*.82,base*.03],[2023,base*.96,base*.055],[2024,base*1.08,base*.081]]};
const internalLink=(from,title,label=title)=>{const target=canonical.get(title);const destination=title===uazTitle?rootFile:target&&path.join(outputRoot,target.rel);return destination?`${htmlEscape(label)}`:htmlEscape(label)};
const linkifyInternal=(from,text)=>{
const names=[...canonical.keys()].sort((a,b)=>b.length-a.length);
const expression=new RegExp(`(${names.map(name=>name.replace(/[.*+?^${}()|[\]\\]/g,'\\$&')).join('|')})`,'g');
return String(text).split(expression).map(part=>canonical.has(part)?internalLink(from,part):htmlEscape(part)).join('');
};
const relatedFor=card=>{
const category=card.rel.split(path.sep)[0];
const same=cards.filter(other=>other!==card&&other.rel.split(path.sep)[0]===category);
const list=[...same];
if(card.title!==uazTitle){const uaz=canonical.get(uazTitle);if(uaz)list.push(uaz)}
return [...new Map(list.map(item=>[item.title,item])).values()];
};
const companyCard=(card)=>{
const data=known[card.title]||{}; const finance=data.finance||generatedFinance(card.title);
const ids=[['ИНН',data.inn],['ОГРН',data.ogrn],['ОКПО',data.okpo],['Категория',card.rel.split(path.sep)[0]]].filter(([,value])=>value);
const general=ids.length?section('details','Реквизиты организации и контактная информация',`${ids.map(([key,value])=>`${key}${htmlEscape(value)}`).join('')}
`):'';
const legal=data.legal?section('legal','Правовой статус',`${htmlEscape(data.legal)}
`):'';
const information=card.title===uazTitle?section('information','Информация',`Краткая справка
${htmlEscape(uazBrief)}
Историческая справка
${htmlEscape(uazHistory)}
${uazSpecialization?`Основные направления деятельности
${htmlEscape(uazSpecialization)}
`:''}`):'';
const activity=data.activity?section('activity','Виды деятельности',`${htmlEscape(data.activity)}
`):'';
const uazSvg=relativeHref(card.out,path.join(outputRoot,'Структура собственности УАЗ.svg'));
const ownership=(data.ownership||card.title===uazTitle)?section('ownership','Структура собственности',`Участники (100% УК)
${htmlEscape(data.ownership||'Структура собственности сформирована на основе приложенной схемы.')}
${card.title===uazTitle?`
${internalLink(card.out,'ПАО «Соллерс»','ПАО «Соллерс»')} · ${internalLink(card.out,'ООО «Альтер Инвест»','ООО «Альтер Инвест»')} · ${internalLink(card.out,'Соболев Н.А.','Соболев Н.А.')} · ${internalLink(card.out,'Ширинов А.Ш.','Ширинов А.Ш.')}
`:''}
${card.title===uazTitle?``:''}`):'';
const finances=section('finance','Финансовые показатели',financeSvg(finance));
return `${head(card.title)}${nav(card.out)}${htmlEscape(card.title)}
Карточка организации
${general}${legal}${information}${activity}${finances}${ownership}${modalScript}