import { z } from 'zod';
import { PriceValueSchema } from './price-value.schema';
import { VatValueSchema } from './vat-value.schema';

// TODO: [Type Safety Improvement - High Priority] Separate input/domain schemas
// Current: 100% optional fields allow invalid prices to pass validation
// Target: Required core fields in domain schema
//
// Problem:
//   - PriceValueSchema: all fields optional (value, currency, currencySymbol)
//   - VatValueSchema: all fields optional (value, inPercent, label, vatType)
//   - Validation passes for {} but runtime crashes on price.value.value
//   - Requires 4 type guard functions (hasValidPrice, etc.)
//
// Proposed solution:
//   1. Input schema (accepts partial data from API):
//      export const PriceInputSchema = z.object({
//        value: z.object({
//          value: z.number().optional(),
//          currency: z.string().optional(),
//          currencySymbol: z.string().optional(),
//        }).optional(),
//        vat: z.object({
//          vatType: z.nativeEnum(VatType).optional(),
//          // ... other optional fields
//        }).optional(),
//      }).optional();
//
//   2. Domain schema (requires core fields):
//      export const PriceDomainSchema = z.object({
//        value: z.object({
//          value: z.number().positive(),      // REQUIRED
//          currency: z.string().optional(),
//          currencySymbol: z.string().optional(),
//        }),
//        vat: z.object({
//          vatType: z.nativeEnum(VatType),    // REQUIRED
//          value: z.number().optional(),
//          // ... other optional fields
//        }),
//      });
//
//   3. Adapter converts input → domain with validation:
//      export function toDomainPrice(input: PriceInput): Price | undefined {
//        const parsed = PriceDomainSchema.safeParse(input);
//        return parsed.success ? parsed.data : undefined;
//      }
//
// Benefits:
//   - Type-safe domain logic (guaranteed to have core fields)
//   - Better error messages ("value.value is required" instead of runtime crash)
//   - Eliminates need for type guards
//   - Clear boundary between API and domain
//
// Effort: ~4 hours | Impact: High | Risk: Low
// See: complexity-analysis.md (TypeScript Section, Issue 5)
export const PriceSchema = z.object({
  value: PriceValueSchema.describe('Value').optional(),
  vat: VatValueSchema.describe('Value Added Tax').optional(),
});
