// stores/penunjangStore.js
import { defineStore } from 'pinia';
import { ref, computed } from 'vue';

export const usePenunjangStore = defineStore('penunjang', () => {
  // State - Penunjang Data
  const penunjangData = ref([
    {
      id: 1,
      no: 1,
      kode: 'LAB',
      nama: 'LABORATORIUM',
      jenis: 'Medis',
      shift: 3,
      totalQuota: 150,
      jamShiftList: [
        { dari: '07:00', sampai: '15:00', kuota: 60 },
        { dari: '13:00', sampai: '21:00', kuota: 50 },
        { dari: '21:00', sampai: '07:00', kuota: 40 }
      ],
      autoShift: true,
      jadwalOperasional: ['Senin', 'Selasa', 'Rabu', 'Kamis', 'Jum\'at', 'Sabtu', 'Minggu'],
      status: 'Aktif',
      estimasiLayanan: 30,
      keterangan: 'Pemeriksaan darah lengkap, urine, dan pemeriksaan laboratorium lainnya'
    },
    {
      id: 2,
      no: 2,
      kode: 'RAD',
      nama: 'RADIOLOGI',
      jenis: 'Medis',
      shift: 2,
      totalQuota: 100,
      jamShiftList: [
        { dari: '07:00', sampai: '15:00', kuota: 60 },
        { dari: '13:00', sampai: '21:00', kuota: 40 }
      ],
      autoShift: true,
      jadwalOperasional: ['Senin', 'Selasa', 'Rabu', 'Kamis', 'Jum\'at', 'Sabtu'],
      status: 'Aktif',
      estimasiLayanan: 45,
      keterangan: 'Rontgen, CT Scan, MRI, USG, dan pemeriksaan radiologi lainnya'
    },
    {
      id: 3,
      no: 3,
      kode: 'PAT',
      nama: 'PATOLOGI ANATOMI',
      jenis: 'Medis',
      shift: 1,
      totalQuota: 50,
      jamShiftList: [
        { dari: '07:00', sampai: '15:00', kuota: 50 }
      ],
      autoShift: false,
      jadwalOperasional: ['Senin', 'Selasa', 'Rabu', 'Kamis', 'Jum\'at'],
      status: 'Aktif',
      estimasiLayanan: 60,
      keterangan: 'Pemeriksaan jaringan dan sitologi'
    },
    {
      id: 4,
      no: 4,
      kode: 'RHB',
      nama: 'REHABILITASI MEDIK',
      jenis: 'Medis',
      shift: 2,
      totalQuota: 80,
      jamShiftList: [
        { dari: '07:00', sampai: '13:00', kuota: 40 },
        { dari: '13:00', sampai: '19:00', kuota: 40 }
      ],
      autoShift: true,
      jadwalOperasional: ['Senin', 'Selasa', 'Rabu', 'Kamis', 'Jum\'at'],
      status: 'Aktif',
      estimasiLayanan: 30,
      keterangan: 'Fisioterapi, terapi okupasi, dan terapi wicara'
    },
    {
      id: 5,
      no: 5,
      kode: 'RME',
      nama: 'REKAM MEDIS',
      jenis: 'Non-Medis',
      shift: 2,
      totalQuota: 120,
      jamShiftList: [
        { dari: '07:00', sampai: '15:00', kuota: 70 },
        { dari: '13:00', sampai: '21:00', kuota: 50 }
      ],
      autoShift: true,
      jadwalOperasional: ['Senin', 'Selasa', 'Rabu', 'Kamis', 'Jum\'at', 'Sabtu'],
      status: 'Aktif',
      estimasiLayanan: 15,
      keterangan: 'Pengurusan dokumen rekam medis dan surat keterangan'
    },
    {
      id: 6,
      no: 6,
      kode: 'GIZ',
      nama: 'GIZI',
      jenis: 'Non-Medis',
      shift: 2,
      totalQuota: 60,
      jamShiftList: [
        { dari: '07:00', sampai: '13:00', kuota: 30 },
        { dari: '13:00', sampai: '19:00', kuota: 30 }
      ],
      autoShift: true,
      jadwalOperasional: ['Senin', 'Selasa', 'Rabu', 'Kamis', 'Jum\'at'],
      status: 'Aktif',
      estimasiLayanan: 20,
      keterangan: 'Konsultasi gizi dan diet'
    },
    {
      id: 7,
      no: 7,
      kode: 'LND',
      nama: 'LAUNDRY',
      jenis: 'Non-Medis',
      shift: 3,
      totalQuota: 200,
      jamShiftList: [
        { dari: '06:00', sampai: '14:00', kuota: 80 },
        { dari: '14:00', sampai: '22:00', kuota: 70 },
        { dari: '22:00', sampai: '06:00', kuota: 50 }
      ],
      autoShift: true,
      jadwalOperasional: ['Senin', 'Selasa', 'Rabu', 'Kamis', 'Jum\'at', 'Sabtu', 'Minggu'],
      status: 'Aktif',
      estimasiLayanan: 10,
      keterangan: 'Layanan laundry linen rumah sakit'
    },
    {
      id: 8,
      no: 8,
      kode: 'INF',
      nama: 'PELAYANAN INFORMASI',
      jenis: 'Non-Medis',
      shift: 2,
      totalQuota: 150,
      jamShiftList: [
        { dari: '07:00', sampai: '15:00', kuota: 80 },
        { dari: '13:00', sampai: '21:00', kuota: 70 }
      ],
      autoShift: true,
      jadwalOperasional: ['Senin', 'Selasa', 'Rabu', 'Kamis', 'Jum\'at', 'Sabtu', 'Minggu'],
      status: 'Aktif',
      estimasiLayanan: 10,
      keterangan: 'Informasi umum rumah sakit dan bantuan navigasi'
    },
    {
      id: 9,
      no: 9,
      kode: 'FRM',
      nama: 'FARMASI',
      jenis: 'Medis',
      shift: 3,
      totalQuota: 200,
      jamShiftList: [
        { dari: '07:00', sampai: '15:00', kuota: 80 },
        { dari: '13:00', sampai: '21:00', kuota: 70 },
        { dari: '21:00', sampai: '07:00', kuota: 50 }
      ],
      autoShift: true,
      jadwalOperasional: ['Senin', 'Selasa', 'Rabu', 'Kamis', 'Jum\'at', 'Sabtu', 'Minggu'],
      status: 'Aktif',
      estimasiLayanan: 20,
      keterangan: 'Pelayanan obat dan konsultasi farmasi'
    }
  ]);

  // Computed
  const totalPenunjang = computed(() => penunjangData.value.length);
  const activePenunjang = computed(() => penunjangData.value.filter(p => p.status === 'Aktif'));
  const penunjangMedis = computed(() => penunjangData.value.filter(p => p.jenis === 'Medis'));
  const penunjangNonMedis = computed(() => penunjangData.value.filter(p => p.jenis === 'Non-Medis'));

  // Get penunjang list for dropdowns
  // Standardized to use 'name' for consistency (keeping 'nama' for backward compatibility)
  const penunjangList = computed(() => 
    penunjangData.value
      .filter(p => p.status === 'Aktif')
      .map(p => ({ 
        id: p.id,
        kode: p.kode, 
        nama: p.nama, // Keep 'nama' for internal consistency
        name: p.nama  // Add 'name' alias for external compatibility
      }))
  );

  // Actions - CRUD Operations
  const addPenunjang = (penunjangPayload) => {
    const newId = Math.max(...penunjangData.value.map(p => p.id), 0) + 1;
    const newNo = penunjangData.value.length + 1;
    
    const totalQuota = penunjangPayload.jamShiftList.reduce((total, shift) => {
      return total + (parseInt(shift.kuota) || 0);
    }, 0);

    const newPenunjang = {
      id: newId,
      no: newNo,
      ...penunjangPayload,
      totalQuota: totalQuota,
    };

    penunjangData.value.push(newPenunjang);
    return { success: true, message: `Penunjang ${newPenunjang.nama} berhasil ditambahkan`, data: newPenunjang };
  };

  const updatePenunjang = (penunjangPayload) => {
    const index = penunjangData.value.findIndex(p => p.id === penunjangPayload.id);
    if (index !== -1) {
      const totalQuota = penunjangPayload.jamShiftList.reduce((total, shift) => {
        return total + (parseInt(shift.kuota) || 0);
      }, 0);

      penunjangData.value[index] = {
        ...penunjangData.value[index],
        ...penunjangPayload,
        totalQuota: totalQuota,
      };
      return { success: true, message: `Penunjang ${penunjangPayload.nama} berhasil diupdate` };
    }
    return { success: false, message: 'Penunjang tidak ditemukan' };
  };

  const deletePenunjang = (penunjangId) => {
    const index = penunjangData.value.findIndex(p => p.id === penunjangId);
    if (index !== -1) {
      const penunjangName = penunjangData.value[index].nama;
      penunjangData.value.splice(index, 1);
      penunjangData.value.forEach((p, idx) => {
        p.no = idx + 1;
      });
      return { success: true, message: `Penunjang ${penunjangName} berhasil dihapus` };
    }
    return { success: false, message: 'Penunjang tidak ditemukan' };
  };

  const getPenunjangById = (id) => {
    return penunjangData.value.find(p => p.id === id);
  };

  const getPenunjangByKode = (kode) => {
    return penunjangData.value.find(p => p.kode === kode);
  };

  // Get active penunjang list (untuk Admin Penunjang)
  const getActivePenunjangList = () => {
    return penunjangData.value
      .filter(p => p.status === 'Aktif')
      .map(p => ({ id: p.id, name: p.nama, kode: p.kode }));
  };

  // Utility function
  const getPenunjangNameByKode = (kode) => {
    const penunjang = penunjangData.value.find(p => p.kode === kode);
    return penunjang ? penunjang.nama : kode;
  };

  return {
    // State
    penunjangData,
    totalPenunjang,
    activePenunjang,
    penunjangMedis,
    penunjangNonMedis,
    penunjangList,

    // Actions
    addPenunjang,
    updatePenunjang,
    deletePenunjang,
    getPenunjangById,
    getPenunjangByKode,
    getActivePenunjangList,
    getPenunjangNameByKode,
  };
}, {
  persist: {
    key: 'penunjang-store-state',
    storage: typeof window !== 'undefined' ? localStorage : undefined,
    paths: ['penunjangData'],
  },
});

