import { z } from 'zod';

export const AddressSchema = z.object({
  recipientName: z.string().min(2),
  recipientPhone: z.string().regex(/^\+972\d{8,9}$/),
  cityCode: z.string(),
  cityName: z.string(),
  streetCode: z.string().nullable().optional(),
  streetName: z.string().min(1),
  houseNumber: z.string().min(1),
  apt: z.string().nullable().optional(),
  entrance: z.string().nullable().optional(),
  floor: z.string().nullable().optional(),
  zip: z.string().regex(/^\d{7}$/),
  zipValidated: z.boolean().default(false),
  notes: z.string().max(500).nullable().optional(),
  isDefault: z.boolean().default(false),
});

export type AddressInput = z.infer<typeof AddressSchema>;

/**
 * Normalize an Israeli phone number to E.164 (+972XXXXXXXX) so it satisfies
 * AddressSchema.recipientPhone. Falls back to the trimmed input if it can't be
 * confidently normalized (lets server validation surface the error).
 */
export function normalizeIlPhone(raw: string): string {
  const trimmed = raw.trim();
  if (/^\+972\d{8,9}$/.test(trimmed)) return trimmed;
  const digits = trimmed.replace(/\D/g, '');
  // 972XXXXXXXXX (already country-coded, no plus)
  if (digits.startsWith('972')) return `+${digits}`;
  // 0XXXXXXXXX (local, leading zero) -> drop the 0, prepend +972
  if (digits.startsWith('0')) return `+972${digits.slice(1)}`;
  // bare national number
  if (digits.length >= 8 && digits.length <= 9) return `+972${digits}`;
  return trimmed;
}
