from __future__ import annotations import collections import json import sys import typing import cache import company import integration import planet_bases def main() -> None: cx, ticker = sys.argv[1:] (expertise,) = iter_expertise(ticker) with open('www/closest.json') as f: planet_ids = {planet_id for planet_id, closest_cx in json.load(f).items() if closest_cx == cx} planets = [] print(len(planets), expertise, 'planets near', cx) for planet, cogc in company.iter_planet_cogc(): if planet['PlanetId'] in planet_ids and cogc == expertise: planets.append(planet['PlanetName']) coid_code: dict[str, str] = {} coid_bases = collections.defaultdict(list) for planet in planets: print('\t' + planet) bases = planet_bases.get_bases(planet) for base in bases: if (code := base['OwnerCode']) is None: continue coid_code[base['OwnerId']] = code coid_bases[base['OwnerId']].append(planet) coid_users: dict[str, str] = {company_id: d['Username'] for company_id, d in cache.get('https://pmmg-products.github.io/reports/data/knownCompanies.json').items()} for company_id, co_production in integration.pmmg_monthly_report().items(): if (mat_production := co_production.get(ticker)) is None: continue if bases := coid_bases.get(company_id): code = coid_code[company_id] username = coid_users[company_id] print(f'{code}\t{username}') print(f'{mat_production["amount"]:10.1f}', ', '.join(bases)) def iter_expertise(ticker: str) -> typing.Iterator[str]: buildings: typing.Sequence[company.Building] = cache.get('https://rest.fnar.net/building/allbuildings') for building in buildings: for recipe in building['Recipes']: for output in recipe['Outputs']: if output['CommodityTicker'] == ticker: print(ticker, 'requires', building['Expertise']) yield building['Expertise'] if __name__ == '__main__': main()