import { z } from 'zod';
import { SunEventType } from '../types/sun.js';

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

export type SunTimesParams = z.infer<typeof SunTimesParamsSchema>;

/**
 * Parameters for getting sun times for a date range
 */
export const SunTimesRangeParamsSchema = 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).describe('Latitude for location-specific calculations'),
  longitude: z.number().min(-180).max(180).describe('Longitude for location-specific calculations'),
  format: z.enum(['json', 'text']).optional().describe('Output format (json or text)'),
  timezone: z.string().optional().describe('Timezone for the results. Defaults to UTC.')
});

export type SunTimesRangeParams = z.infer<typeof SunTimesRangeParamsSchema>;

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

export type SunPositionParams = z.infer<typeof SunPositionParamsSchema>;

/**
 * Parameters for finding the next sun event
 */
export const NextSunEventParamsSchema = z.object({
  event: z.nativeEnum(SunEventType).describe('Sun event to find'),
  date: z.string().optional().describe('Starting date (YYYY-MM-DD format). Defaults to current date.'),
  latitude: z.number().min(-90).max(90).describe('Latitude for location-specific calculations'),
  longitude: z.number().min(-180).max(180).describe('Longitude for location-specific calculations'),
  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)'),
  timezone: z.string().optional().describe('Timezone for the results. Defaults to UTC.')
});

export type NextSunEventParams = z.infer<typeof NextSunEventParamsSchema>; 