# 조치원 골목상권 지도 제작기
#
# 골목 덩어리별 예측 위험도까지 지도에 넣어야 해서

import numpy as np
import folium
from folium.plugins import HeatMap

from common import *


def 조치원지도(T, Tp, alley, CATS):
    # 조치원 골목상권 지도
    log("\n" + "=" * 70)
    log(f"7. 지도 시각화 ②: {TARGET} (output/map2_조치원_골목상권.html)")
    log("=" * 70)

    m2 = 지도만들기([T["위도"].median(), T["경도"].median()], 15)

    # 업종별 업소 위치 (앞에 3개 업종만 켜놓음)
    for i in range(8):
        c = CATS[i]
        레이어 = folium.FeatureGroup(name=f"현재 업소: {c}", show=(i < 3))
        for _, r in T[T["상권업종대분류명"] == c].iterrows():
            folium.CircleMarker([r["위도"], r["경도"]], radius=3, color=COLORS[i], fill=True,
                                fill_opacity=0.8, weight=0,
                                tooltip=f"{r['상호명']} | {r['상권업종중분류명']} | {r['도로']}").add_to(레이어)
        레이어.add_to(m2)

    # 없어진 업소, 새로 생긴 업소 히트맵
    HeatMap(Tp.loc[Tp["소멸"] == 1, ["위도", "경도"]].values.tolist(), radius=18, blur=15,
            name="1년간 소멸 업소 밀집(히트맵)", show=False).add_to(m2)
    HeatMap(T.loc[T["신규"] == 1, ["위도", "경도"]].values.tolist(), radius=18, blur=15,
            name="1년간 신규 업소 밀집(히트맵)", show=False).add_to(m2)

    # 골목 덩어리 표시 (원 클릭하면 정보 나옴)
    골목레이어 = folium.FeatureGroup(name="골목상권 덩어리(DBSCAN)", show=True)
    for k, r in alley.iterrows():
        글 = (f"<b>골목군집 {k}</b><br>대표도로: {r['대표도로']}<br>업소 {int(r['업소수'])}개<br>"
             f"주요업종: {r['주요업종']}<br>음식 {r['음식비율']:.0%} · 소매 {r['소매비율']:.0%}<br>"
             f"1년 소멸률 {r['소멸률']:.0%} · 신규 {r['신규비율']:.0%}<br>예측위험 {r['평균예측위험']:.2f}")
        folium.CircleMarker([r["위도"], r["경도"]], radius=8 + np.sqrt(r["업소수"]), color="black", weight=2,
                            fill=True, fill_color="#ffffff", fill_opacity=0.3,
                            popup=folium.Popup(글, max_width=280), tooltip=f"골목군집 {k}: {r['대표도로']}").add_to(골목레이어)
    골목레이어.add_to(m2)
    folium.LayerControl(collapsed=False).add_to(m2)
    m2.save(os.path.join(결과폴더, "map2_조치원_골목상권.html"))
    log("저장 완료")


if __name__ == "__main__":
    from jochiwon_alley import 조치원분석, 소멸예측
    now, prev, CATS = 데이터준비()
    T, Tp, alley = 조치원분석(now, prev)
    소멸예측(prev, Tp, alley)
    조치원지도(T, Tp, alley, CATS)
