import api from '../config/api';
import { Job, JobAssignment, JobNote } from '../types';

export const jobService = {
  async list(): Promise<Job[]> {
    const response = await api.get('/jobs');
    return response.data.data || response.data.jobs || response.data || [];
  },

  async get(id: number): Promise<Job> {
    const response = await api.get(`/jobs/${id}`);
    return response.data.data || response.data.job || response.data;
  },

  async create(data: {
    title: string;
    description?: string;
    scheduled_start?: string;
    scheduled_end?: string;
    priority_id?: number;
    job_type_id?: number;
    customer_id?: number;
    site_id?: number;
    required_geofence_id?: number;
    location_address?: string;
    location_latitude?: number;
    location_longitude?: number;
    assign_user_ids?: number[];
    assignment_role?: string;
    note?: string;
  }): Promise<Job> {
    const response = await api.post('/jobs', data);
    return response.data.data || response.data.job || response.data;
  },

  async assign(jobId: number, userId: number, assignmentRole?: string): Promise<any> {
    const response = await api.post(`/jobs/${jobId}/assign`, {
      user_id: userId,
      assignment_role: assignmentRole || 'TECHNICIAN',
    });
    return response.data;
  },

  async assignments(jobId: number): Promise<JobAssignment[]> {
    const response = await api.get(`/jobs/${jobId}/assignments`);
    return response.data.data || response.data.assignments || response.data || [];
  },

  async changeStatus(
    jobId: number,
    status: string,
    reason?: string
  ): Promise<any> {
    const response = await api.patch(`/jobs/${jobId}/status`, { status, reason });
    return response.data;
  },

  async addNote(jobId: number, note: string, noteType?: string): Promise<JobNote> {
    const response = await api.post(`/jobs/${jobId}/notes`, {
      note,
      note_type: noteType || 'GENERAL',
    });
    return response.data;
  },

  async listNotes(jobId: number): Promise<JobNote[]> {
    const response = await api.get(`/jobs/${jobId}/notes`);
    return response.data.data || response.data.notes || response.data || [];
  },

  async removeMember(jobId: number, userId: number): Promise<void> {
    await api.post(`/jobs/${jobId}/unassign`, { user_id: userId });
  },

  async remove(jobId: number): Promise<void> {
    await api.delete(`/jobs/${jobId}`);
  },
};
