import unittest
import os

from pydantic import ValidationError

os.environ["JWT_SECRET"] = "test-secret-value-with-at-least-32-characters"

from app.api.reminders import ReminderCreate, ReminderUpdate


class ReminderAPIContractTests(unittest.TestCase):
    def test_create_rejects_invalid_reminder_type_status_and_trigger_days(self):
        with self.assertRaises(ValidationError):
            ReminderCreate(reminder_type="invoice_ovredue", trigger_days=7, status="active")

        with self.assertRaises(ValidationError):
            ReminderCreate(reminder_type="invoice_overdue", trigger_days=-1, status="active")

        with self.assertRaises(ValidationError):
            ReminderCreate(reminder_type="invoice_overdue", trigger_days=366, status="active")

        with self.assertRaises(ValidationError):
            ReminderCreate(reminder_type="invoice_overdue", trigger_days=7, status="inactive")

    def test_update_rejects_invalid_optional_values(self):
        with self.assertRaises(ValidationError):
            ReminderUpdate(reminder_type="bad_type")

        with self.assertRaises(ValidationError):
            ReminderUpdate(trigger_days=-1)

        valid = ReminderUpdate(trigger_days=30, status="disabled")
        self.assertEqual(30, valid.trigger_days)
        self.assertEqual("disabled", valid.status)


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