import { Storage, HTMLTable, Collection, LogParser, LogItem, File } from '../core' import { Country, Subdivision } from '../models' import { DATA_DIR, LOGS_DIR, README_DIR } from '../constants' import { Table } from './table' export class CountryTable implements Table { constructor() {} async make() { const dataStorage = new Storage(DATA_DIR) const countriesContent = await dataStorage.json('countries.json') const countries = new Collection(countriesContent).map(data => new Country(data)) const subdivisionsContent = await dataStorage.json('subdivisions.json') const subdivisions = new Collection(subdivisionsContent).map(data => new Subdivision(data)) const parser = new LogParser() const logsStorage = new Storage(LOGS_DIR) const generatorsLog = await logsStorage.read('generators.log') let data = new Collection() parser .parse(generatorsLog) .filter( (logItem: LogItem) => logItem.filepath.includes('countries/') || logItem.filepath.includes('subdivisions/') ) .forEach((logItem: LogItem) => { const file = new File(logItem.filepath) const code = file.getFilename().toUpperCase() const [countryCode, subdivisionCode] = code.split('-') || ['', ''] if (subdivisionCode) { const subdivision = subdivisions.first( (subdivision: Subdivision) => subdivision.code === code ) const country = countries.first( (country: Country) => country.code === subdivision.country ) data.add([ `${country.name}/${subdivision.name}`, `      ${subdivision.name}`, logItem.count, `https://iptv-org.github.io/iptv/${logItem.filepath}` ]) } else if (countryCode === 'INT') { data.add([ 'ZZ', `🌍 International`, logItem.count, `https://iptv-org.github.io/iptv/${logItem.filepath}` ]) } else { const country = countries.first((country: Country) => country.code === countryCode) data.add([ country.name, `${country.flag} ${country.name}`, logItem.count, `https://iptv-org.github.io/iptv/${logItem.filepath}` ]) } }) data = data .orderBy(item => item[0]) .map(item => { item.shift() return item }) const table = new HTMLTable(data.all(), [ { name: 'Country' }, { name: 'Channels', align: 'right' }, { name: 'Playlist', nowrap: true } ]) const readmeStorage = new Storage(README_DIR) await readmeStorage.save('_countries.md', table.toString()) } }