import { z } from 'zod';
import { MoonPhaseName } from '../types/moon.js';

/**
 * Parameters for getting moon phase
 */
export const MoonPhaseParamsSchema = z.object({
  date: z.string().optional().describe('Date to get moon phase for (YYYY-MM-DD format). Defaults to current date.'),
  latitude: z.number().min(-90).max(90).optional().describe('Latitude for location-specific calculations'),
  longitude: z.number().min(-180).max(180).optional().describe('Longitude for location-specific calculations'),
  format: z.enum(['json', 'text']).optional().describe('Output format (json or text)')
});

export type MoonPhaseParams = z.infer<typeof MoonPhaseParamsSchema>;

/**
 * Parameters for getting moon phases for a date range
 */
export const MoonPhasesRangeParamsSchema = z.object({
  start_date: z.string().describe('Start date (YYYY-MM-DD format)'),
  end_date: z.string().describe('End date (YYYY-MM-DD format)'),
  latitude: z.number().min(-90).max(90).optional().describe('Latitude for location-specific calculations'),
  longitude: z.number().min(-180).max(180).optional().describe('Longitude for location-specific calculations'),
  format: z.enum(['json', 'text']).optional().describe('Output format (json or text)')
});

export type MoonPhasesRangeParams = z.infer<typeof MoonPhasesRangeParamsSchema>;

/**
 * Parameters for getting next moon phase
 */
export const NextMoonPhaseParamsSchema = z.object({
  phase: z.enum([
    MoonPhaseName.NEW_MOON,
    MoonPhaseName.FIRST_QUARTER,
    MoonPhaseName.FULL_MOON,
    MoonPhaseName.LAST_QUARTER
  ]).describe('Moon phase to find'),
  date: z.string().optional().describe('Starting date (YYYY-MM-DD format). Defaults to current date.'),
  count: z.number().positive().optional().describe('Number of occurrences to return. Defaults to 1.'),
  format: z.enum(['json', 'text']).optional().describe('Output format (json or text)')
});

export type NextMoonPhaseParams = z.infer<typeof NextMoonPhaseParamsSchema>; 