# -*- coding: utf-8 -*-
"""전가 종합 — 3단계(전체/주종/제품) × 원가(PPI)→출고가→소비자가(CPI)
 전체주류: CPI 주류(B01,901Y009), PPI 주류(30121AA,404Y014) 신규 수집
 주종: 소주·맥주 PPI/CPI(기존)
 제품: 카스·참이슬(기존 결과 인용)
 변경시점: 2020 맥주 종량세 / 2024 소주 기준판매비율. 출고가는 2022→2024 브리지.
"""
import sys,io,json,urllib.request
sys.stdout=io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')
import numpy as np, pandas as pd, statsmodels.formula.api as smf
B='C:/Temp/주류세/공개데이터'
S=json.load(open(r'C:/Users/meals/.secret/ENVIRONMENT_VARIABLES.json',encoding='utf-8'))['data_api_keys']
k=S['API_KEY_BOK']
def ecos(stat,item,s='200601',e='202512'):
    url=f'https://ecos.bok.or.kr/api/StatisticSearch/{k}/json/kr/1/1000/{stat}/M/{s}/{e}/{item}'
    d=json.loads(urllib.request.urlopen(url,timeout=40).read().decode('utf-8'))
    r=d['StatisticSearch']['row']
    return pd.DataFrame({'ym':[int(x['TIME']) for x in r],'v':[float(x['DATA_VALUE']) for x in r]})

# 전체주류 지수 수집·저장
cpi_all=ecos('901Y009','B01').rename(columns={'v':'cpi'})
ppi_all=ecos('404Y014','30121AA').rename(columns={'v':'ppi'})
cpi_all.to_csv(B+'/한국은행_ECOS/CPI_주류전체_200601_202512.csv',index=False,encoding='utf-8-sig')
ppi_all.to_csv(B+'/한국은행_ECOS/PPI_주류전체_200601_202512.csv',index=False,encoding='utf-8-sig')

def pt(cpi,ppi,label):
    m=cpi.merge(ppi,on='ym').sort_values('ym')
    m['lcpi']=np.log(m.cpi); m['lppi']=np.log(m.ppi)
    m['dc']=m.lcpi.diff(); m['dp']=m.lppi.diff(); m['dp1']=m.dp.shift(1)
    mm=m.dropna(subset=['dc','dp','dp1'])
    r=smf.ols('dc ~ dp + dp1',data=mm).fit(cov_type='HAC',cov_kwds={'maxlags':6})
    lr=smf.ols('lcpi ~ lppi',data=m).fit(cov_type='HAC',cov_kwds={'maxlags':12})
    cum=r.params['dp']+r.params['dp1']
    print(f'  [{label}] 단기 {r.params["dp"]:+.2f} / 누적 {cum:+.2f} / 장기 {lr.params["lppi"]:+.2f}')
    return dict(short=round(float(r.params['dp']),2),cum=round(float(cum),2),long=round(float(lr.params['lppi']),2))

print('===== 원가(PPI)→소비자가(CPI) 전가 (월별) =====')
res={}
res['전체주류']=pt(cpi_all,ppi_all,'전체주류')
cpi=pd.read_csv(B+'/한국은행_ECOS/CPI_품목별_소주맥주_200601_202512.csv')
ppi=pd.read_csv(B+'/한국은행_ECOS/PPI_품목별_소주맥주_200601_202512.csv')
for j in ['소주','맥주']:
    c=cpi[cpi.품목==j].groupby('시점',as_index=False).값.mean().rename(columns={'시점':'ym','값':'cpi'})
    p=ppi[ppi.품목==j].groupby('시점',as_index=False).값.mean().rename(columns={'시점':'ym','값':'ppi'})
    res[j]=pt(c,p,j)

# 세후 출고가 수준(전체/소주/맥주) — 변경시점 변화
print('\n===== 세후 출고가 변화 (원/L) =====')
ex=pd.read_csv(B+'/세후출고가_전체주종_2018_2024.csv')
exv=ex.pivot_table(index='연도',columns='주종',values='세후')
def chg(col,y0,y1):
    try: a,b=exv.loc[y0,col],exv.loc[y1,col]; return a,b,(b/a-1)*100
    except: return None
for col in ['전체주류','소주','맥주']:
    c20=chg(col,2019,2020); c24=chg(col,2022,2024)
    s20=f'{c20[0]:.0f}→{c20[1]:.0f}({c20[2]:+.1f}%)' if c20 else '—'
    s24=f'{c24[0]:.0f}→{c24[1]:.0f}({c24[2]:+.1f}%)' if c24 else '—'
    print(f'  {col:<6} 2019→2020(맥주종량세): {s20}  | 2022→2024(소주기준판매비율): {s24}')

json.dump(res,open(B+'/문헌/passthrough_3tier.json','w',encoding='utf-8'),ensure_ascii=False,indent=2)
print('\n저장: CPI/PPI_주류전체, 문헌/passthrough_3tier.json')
