"""
Chart Builder - 可扩展的图表构建系统

这是一个分层的图表构建包，用于解决 P(n,2) 组合爆炸问题。

架构：
- oxml/: 底层 XML 操作（纯 lxml）
- builder.py: 中层构建器（有状态的编排器）
- parser.py: 反向解析器（从 PPTX 提取配置）
- styles.py: 样式配置（颜色、线型、标记点）
- api.py: 高层公共接口（简洁的 API）

正向工程（构建图表）：
    from ppt_station.chart_builder import create_combo_chart
    
    chart = create_combo_chart(
        slide=slide,
        df=df,
        categories_col="日期",
        series_config=[
            {"key": "销售额", "name": "销售额", "type": "bar", "axis": "primary"},
            {"key": "增长率", "name": "增长率", "type": "line", "axis": "secondary"},
        ]
    )

反向工程（解析图表）：
    from ppt_station.chart_builder import parse_chart_from_pptx
    
    series_config, df, categories_col = parse_chart_from_pptx("template.pptx")
    # 现在可以用这些配置来复现图表

样式配置：
    from ppt_station.chart_builder import StyleConfig, create_combo_chart
    
    # 自定义样式：无标记点、1.5pt 线宽、深色系
    custom_style = StyleConfig(
        color_scheme="dark_only",
        line_width_pt=1.5,
        marker_style="none",
    )
    
    chart = create_combo_chart(
        slide=slide,
        df=df,
        categories_col="日期",
        series_config=[...],
        style_config=custom_style
    )
"""

from .api import create_combo_chart
from .cleaner import ChartJunkCleaner, clean_chart
from .parser import (
    ChartParser,
    parse_chart_from_pptx,
    parse_all_charts_from_pptx
)

# 导出样式配置（如果可用）
try:
    from .styles import (
        StyleConfig,
        DEFAULT_STYLE_CONFIG,
        COLOR_SCHEMES,
        # 颜色常量
        DARK_RED,
        DARK_GRAY,
        DARK_BLUE,
        DARK_ORANGE,
        LIGHT_RED,
        LIGHT_GRAY,
        LIGHT_BLUE,
        LIGHT_ORANGE,
    )
    _HAS_STYLES = True
except ImportError:
    _HAS_STYLES = False

# 导出布局配置（如果可用）
try:
    from .layout import (
        ChartLayoutConfig,
        LegendConfig,
        CategoryAxisConfig,
        ValueAxisConfig,
        DEFAULT_LEGEND_CONFIG,
        DEFAULT_CATEGORY_AXIS_CONFIG,
        DEFAULT_VALUE_AXIS_CONFIG,
    )
    _HAS_LAYOUT = True
except ImportError:
    _HAS_LAYOUT = False

# 导出日期轴配置（如果可用）
try:
    from .date_axis import (
        DateAxisConfig,
        DAILY_TICKS,
        WEEKLY_TICKS,
        BIWEEKLY_TICKS,
        MONTHLY_TICKS,
        QUARTERLY_TICKS,
        YEARLY_TICKS,
    )
    _HAS_DATE_AXIS = True
except ImportError:
    _HAS_DATE_AXIS = False

# 构建 __all__
__all__ = [
    'create_combo_chart',
    'ChartParser',
    'parse_chart_from_pptx',
    'parse_all_charts_from_pptx',
    'ChartJunkCleaner',
    'clean_chart',
]

if _HAS_STYLES:
    __all__.extend([
        'StyleConfig',
        'DEFAULT_STYLE_CONFIG',
        'COLOR_SCHEMES',
        'DARK_RED', 'DARK_GRAY', 'DARK_BLUE', 'DARK_ORANGE',
        'LIGHT_RED', 'LIGHT_GRAY', 'LIGHT_BLUE', 'LIGHT_ORANGE',
    ])

if _HAS_LAYOUT:
    __all__.extend([
        'ChartLayoutConfig',
        'LegendConfig',
        'CategoryAxisConfig',
        'ValueAxisConfig',
        'DEFAULT_LEGEND_CONFIG',
        'DEFAULT_CATEGORY_AXIS_CONFIG',
        'DEFAULT_VALUE_AXIS_CONFIG',
    ])

if _HAS_DATE_AXIS:
    __all__.extend([
        'DateAxisConfig',
        'DAILY_TICKS',
        'WEEKLY_TICKS',
        'BIWEEKLY_TICKS',
        'MONTHLY_TICKS',
        'QUARTERLY_TICKS',
        'YEARLY_TICKS',
    ])

