# -*- coding: utf-8 -*-
"""从 17040 缓存克隆 params，生成 4 个取数 query（数据截至 T-1，上界每日滚动）。
全部数据源：伽利略·经营管理报表_核心指标（vizId 17040 / 数据集 35003）。"""
import json, copy, datetime, calendar

RUN_TAG = datetime.datetime.now().strftime("%m%d_%H%M%S")  # 进 metric 标签，防同参请求命中端点缓存

# 日期上界每日自动滚动（T-1），无需手改
_T1 = datetime.date.today() - datetime.timedelta(days=1)
_END = _T1.strftime("%Y%m%d")                                            # 日维度上界 = T-1
_START_CITY_D = (_T1 - datetime.timedelta(days=30)).strftime("%Y%m%d")   # city_d 31 天窗口（T-8/周环比/电费异动需要）
_MONTH_END = "%s%02d%02d" % (_T1.year, _T1.month,
                             calendar.monthrange(_T1.year, _T1.month)[1])  # 月维度上界 = 当月最后一天
_EXPR_M = "data_date >= '20260501' and data_date <= '%s'" % _MONTH_END
_EXPR_REG_D = "data_date >= '20260630' and data_date <= '%s'" % _END
_EXPR_CITY_D = "data_date >= '%s' and data_date <= '%s'" % (_START_CITY_D, _END)

BASE = "/data/workspace/.kiro/cache/read-polaris-skill"
dash = json.load(open(f"{BASE}/dashboard_17040.json", encoding="utf-8"))
CH_M, CH_D = "1764676014220", "1765435183501"
pm = dash["charts"][CH_M]["params"]
pd = dash["charts"][CH_D]["params"]

SECTION_COLS = {"hexinzhibiao", "sunyibiao", "feilv"}  # 分区标签行（【核心指标】/【损益表】/【成本费率】）
def metric_rows(p):
    out = []
    for r in p["rows"]:
        if r.get("column") in SECTION_COLS:
            continue  # 只去掉分区标签行；----成本绝对值指标（租金-含手补/电费成本/人力/折旧/安装等）保留
        out.append(copy.deepcopy(r))
    return out

def dim(column, label, dataType="string", **kw):
    d = {"label": label, "column": column, "dataType": dataType, "dmType": "dimension",
         "useDecrypt": 0, "decrypt": 0, "type": "simple", "fieldKey": column}
    d.update(kw)
    return d

DIM_CITY = dim("final_city_name", "大城市")
DIM_TYPE = dim("city_type", "城市类型")
DIM_MON  = {"label": "日期(月)", "column": "data_date_mounth", "dataType": "yyyymm", "dmType": "dimension",
            "originalColumn": "data_date", "formatType": "YYYYMM", "dimensionType": "derived",
            "weekRule": None, "dateTrunc": "month", "useDecrypt": 0, "type": "simple", "fieldKey": "data_date_mounth"}
DIM_DAY  = {"label": "日期(日)", "column": "data_date_day", "dataType": "yyyymmdd", "dmType": "dimension",
            "originalColumn": "data_date", "formatType": "YYYYMMDD", "dimensionType": "derived",
            "weekRule": None, "dateTrunc": "day", "useDecrypt": 0, "type": "simple", "fieldKey": "data_date_day"}

DAQU = [f for f in json.load(open(f"{BASE}/tmp/q_gpuser_m.json", encoding="utf-8"))["params"]["filters"]
        if f.get("column") == "daqu_name"]

def filters_of(p, date_expr):
    fs = copy.deepcopy(p["filters"])
    for f in fs:
        if f.get("column") == "data_date":
            f["expression"] = date_expr
    if not any(f.get("column") == "daqu_name" for f in fs):
        fs.extend(copy.deepcopy(DAQU))
    return fs

def make(chart, p, rows, date_expr, sort_col, out):
    q = {
        "dashboardId": 17040, "chartId": chart, "chartType": "Table",
        "metric": out.split("/")[-1].removesuffix(".json") + "_" + RUN_TAG, "source": "经营管理报表_核心指标",
        "params": {
            "dataSetId": p["dataSetId"], "dataSetType": p["dataSetType"],
            "dataSetName": p["dataSetName"], "pageNo": 1, "pageSize": 50000,
            "hasMetric": "rows",
            "rows": rows + metric_rows(p),
            "columns": copy.deepcopy(p.get("columns", [])),
            "filters": filters_of(p, date_expr),
            "sortBy": [{"column": sort_col, "asc": True, "originalColumn": None,
                        "formatType": None, "dimensionType": None, "weekRule": None, "dateTrunc": None}],
        },
    }
    json.dump(q, open(out, "w", encoding="utf-8"), ensure_ascii=False)
    print("written", out, "rows:", len(q["params"]["rows"]))

T = f"{BASE}/tmp"
make(CH_M, pm, [DIM_CITY, DIM_TYPE, DIM_MON], _EXPR_M, "data_date_mounth", f"{T}/q2_city_m.json")
make(CH_M, pm, [DIM_MON], _EXPR_M, "data_date_mounth", f"{T}/q2_reg_m.json")
make(CH_D, pd, [DIM_DAY], _EXPR_REG_D, "data_date_day", f"{T}/q2_reg_d.json")
make(CH_D, pd, [DIM_DAY, DIM_CITY], _EXPR_CITY_D, "data_date_day", f"{T}/q2_city_d.json")
