import unittest
from pathlib import Path


ROOT = Path(__file__).resolve().parents[2]


def source(path: str) -> str:
    return (ROOT / path).read_text(encoding="utf-8")


class InvoiceSettingsTests(unittest.TestCase):
    def test_backend_exposes_invoice_template_and_payment_methods_config(self) -> None:
        config_api = source("backend/app/api/config.py")

        self.assertIn('"/invoice-template"', config_api)
        self.assertIn('"/payment-methods"', config_api)
        self.assertIn("InvoiceTemplateConfigResponse", config_api)
        self.assertIn("PaymentMethodsConfigResponse", config_api)
        self.assertIn("email_subject_template", config_api)
        self.assertIn("email_body_template", config_api)
        self.assertIn("invoice_email_subject_template", config_api)
        self.assertIn("invoice_email_body_template", config_api)

    def test_invoice_pdf_uses_configurable_template(self) -> None:
        pdf_service = source("backend/app/services/invoice_pdf.py")

        self.assertIn("invoice_template_html", pdf_service)
        self.assertIn("DEFAULT_INVOICE_TEMPLATE", pdf_service)
        self.assertIn("StrictUndefined", pdf_service)
        self.assertIn("DEFAULT_INVOICE_EMAIL_SUBJECT_TEMPLATE", pdf_service)
        self.assertIn("DEFAULT_INVOICE_EMAIL_BODY_TEMPLATE", pdf_service)
        self.assertIn("render_invoice_email", pdf_service)

    def test_frontend_exposes_invoice_settings_page_and_payment_modal(self) -> None:
        router = source("frontend/src/router/index.js")
        nav = source("frontend/src/components/AppLayout.vue")
        detail = source("frontend/src/pages/InvoiceDetailPage.vue")
        settings = source("frontend/src/pages/InvoiceSettingsPage.vue")

        self.assertIn("InvoiceSettings", router)
        self.assertIn("invoice-settings", router)
        self.assertIn("/invoice-settings", nav)
        self.assertIn("showPaymentModal", detail)
        self.assertIn("paymentForm", detail)
        self.assertIn("emailSubjectTemplate", settings)
        self.assertIn("emailBodyTemplate", settings)
        self.assertIn("发票邮件模板", settings)


if __name__ == "__main__":
    unittest.main()
