'use server';

import { cookies } from 'next/headers';
import { revalidatePath } from 'next/cache';

export async function getMeasurements() {
  try {
    const cookieStore = await cookies();
    const token = cookieStore.get('token')?.value;

    if (!token) {
      return {
        success: false,
        message: 'Authentication required. Please log in.',
      };
    }

    const baseUrl = process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000';
    
    const response = await fetch(`${baseUrl}/api/measurement/index`, {
      method: 'GET',
      headers: {
        'Cookie': `token=${token}`,
      },
      cache: 'no-store',
    });

    if (!response.ok) {
      const errorData = await response.json().catch(() => ({}));
      return {
        success: false,
        message: errorData.message || `Failed to fetch measurements (${response.status})`,
      };
    }

    const result = await response.json();

    return {
      success: true,
      data: result.data || [],
    };
  } catch (error: any) {
    console.error('Fetch Measurements Error:', error);
    return {
      success: false,
      message: error.message || 'Failed to fetch measurements',
    };
  }
}

export async function saveMeasurement(payload: any) {
  try {
    const cookieStore = await cookies();
    const token = cookieStore.get('token')?.value;

    if (!token) {
      return {
        success: false,
        message: 'Authentication required. Please log in.',
      };
    }

    const baseUrl = process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000';
    
    const response = await fetch(`${baseUrl}/api/measurement/save`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Cookie': `token=${token}`,
      },
      body: JSON.stringify(payload),
      cache: 'no-store',
    });

    if (!response.ok) {
      const errorData = await response.json().catch(() => ({}));
      return {
        success: false,
        message: errorData.message || `Failed to save measurement (${response.status})`,
      };
    }

    const result = await response.json();

    // Revalidate measurement pages
    revalidatePath('/dashboard/measurement');

    return {
      success: true,
      message: 'Measurement added successfully!',
      data: result.data,
    };
  } catch (error: any) {
    console.error('Save Measurement Error:', error);
    return {
      success: false,
      message: error.message || 'Failed to save measurement',
    };
  }
}

export async function updateMeasurement(id: string, payload: any) {
  try {
    const cookieStore = await cookies();
    const token = cookieStore.get('token')?.value;

    if (!token) {
      return {
        success: false,
        message: 'Authentication required. Please log in.',
      };
    }

    const baseUrl = process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000';
    
    const response = await fetch(`${baseUrl}/api/measurement/update/${id}`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Cookie': `token=${token}`,
      },
      body: JSON.stringify(payload),
      cache: 'no-store',
    });

    if (!response.ok) {
      const errorData = await response.json().catch(() => ({}));
      return {
        success: false,
        message: errorData.message || `Failed to update measurement (${response.status})`,
      };
    }

    const result = await response.json();

    // Revalidate measurement pages
    revalidatePath('/dashboard/measurement');

    return {
      success: true,
      message: 'Measurement updated successfully!',
      data: result.data,
    };
  } catch (error: any) {
    console.error('Update Measurement Error:', error);
    return {
      success: false,
      message: error.message || 'Failed to update measurement',
    };
  }
}

export async function deleteMeasurement(id: string) {
  try {
    const cookieStore = await cookies();
    const token = cookieStore.get('token')?.value;

    if (!token) {
      return {
        success: false,
        message: 'Authentication required. Please log in.',
      };
    }

    const baseUrl = process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000';
    
    const response = await fetch(`${baseUrl}/api/measurement/delete/${id}`, {
      method: 'DELETE',
      headers: {
        'Cookie': `token=${token}`,
      },
      cache: 'no-store',
    });

    if (!response.ok) {
      const errorData = await response.json().catch(() => ({}));
      return {
        success: false,
        message: errorData.message || `Failed to delete measurement (${response.status})`,
      };
    }

    const result = await response.json();

    // Revalidate measurement pages
    revalidatePath('/dashboard/measurement');

    return {
      success: true,
      message: 'Measurement deleted successfully!',
      data: result.data,
    };
  } catch (error: any) {
    console.error('Delete Measurement Error:', error);
    return {
      success: false,
      message: error.message || 'Failed to delete measurement',
    };
  }
}
