"""Enterprise OpenPyXL Styling Constants & Formatters.
Unified palette: Dark Navy header, thin borders, bold summary, number formats.
"""

from __future__ import annotations

from openpyxl.styles import Alignment, Border, Font, PatternFill, Side

# Palette
COLOR_HEADER_NAVY = "0F172A"
COLOR_HEADER_TEXT = "FFFFFF"
COLOR_SECTION_FILL = "F1F5F9"
COLOR_TOTAL_FILL = "E2E8F0"
COLOR_BORDER_SLATE = "94A3B8"
COLOR_HIGHLIGHT_TEAL = "0D9488"

# Fonts
FONT_TITLE = Font(name="Arial", size=14, bold=True, color="000000")
FONT_SUBTITLE = Font(name="Arial", size=11, italic=True, color="334155")
FONT_HEADER = Font(name="Arial", size=10, bold=True, color=COLOR_HEADER_TEXT)
FONT_SECTION = Font(name="Arial", size=10, bold=True, color="0F172A")
FONT_DATA = Font(name="Arial", size=10, color="000000")
FONT_MONO = Font(name="Courier New", size=10, color="000000")
FONT_TOTAL = Font(name="Arial", size=10, bold=True, color="000000")

# Fills
FILL_HEADER = PatternFill(
    start_color=COLOR_HEADER_NAVY, end_color=COLOR_HEADER_NAVY, fill_type="solid"
)
FILL_SECTION = PatternFill(
    start_color=COLOR_SECTION_FILL, end_color=COLOR_SECTION_FILL, fill_type="solid"
)
FILL_TOTAL = PatternFill(
    start_color=COLOR_TOTAL_FILL, end_color=COLOR_TOTAL_FILL, fill_type="solid"
)

# Borders
BORDER_THIN_SIDE = Side(border_style="thin", color=COLOR_BORDER_SLATE)
BORDER_MEDIUM_SIDE = Side(border_style="medium", color="0F172A")
BORDER_DOUBLE_SIDE = Side(border_style="double", color="0F172A")

BORDER_BOX = Border(
    left=BORDER_THIN_SIDE,
    right=BORDER_THIN_SIDE,
    top=BORDER_THIN_SIDE,
    bottom=BORDER_THIN_SIDE,
)

BORDER_TOTAL = Border(
    left=BORDER_THIN_SIDE,
    right=BORDER_THIN_SIDE,
    top=BORDER_THIN_SIDE,
    bottom=BORDER_DOUBLE_SIDE,
)

# Alignments
ALIGN_LEFT = Alignment(horizontal="left", vertical="center", wrap_text=True)
ALIGN_CENTER = Alignment(horizontal="center", vertical="center", wrap_text=True)
ALIGN_RIGHT = Alignment(horizontal="right", vertical="center")
ALIGN_HEADER = Alignment(horizontal="center", vertical="center", wrap_text=True)

# Number Formats
FMT_CURRENCY_VND = '#,##0" ₫"'
FMT_INTEGER = "#,##0"
FMT_DECIMAL_2 = "#,##0.00"
FMT_DECIMAL_4 = "#,##0.0000"
