"use client"

import { useState, useEffect, useCallback } from "react"

export interface Offre {
  id: string
  poste: string
  localisation: string
  contrat: string
  salaire: string
  typeRemuneration: string
  frequence: string
  avantages: string[]
  statut: "Actif" | "Brouillon" | "Urgent" | "Clôturé"
  candidats: number
  dateCreation: string
}

const CLE_STORAGE = "scpro360_offres"

function lireStorage(): Offre[] {
  if (typeof window === "undefined") return []
  try {
    const data = localStorage.getItem(CLE_STORAGE)
    return data ? JSON.parse(data) : []
  } catch {
    return []
  }
}

function ecrireStorage(offres: Offre[]) {
  if (typeof window === "undefined") return
  try {
    localStorage.setItem(CLE_STORAGE, JSON.stringify(offres))
  } catch (e) {
    console.error("Erreur localStorage:", e)
  }
}

export function useOffres() {
  const [offres, setOffres] = useState<Offre[]>([])
  const [charge, setCharge] = useState(false)

  useEffect(() => {
    setOffres(lireStorage())
    setCharge(true)
  }, [])

  const sauvegarder = useCallback((nouvellesOffres: Offre[]) => {
    ecrireStorage(nouvellesOffres)
    setOffres(nouvellesOffres)
  }, [])

  const ajouterOffre = useCallback((
    offre: Omit<Offre, "id" | "candidats" | "dateCreation">
  ): Offre => {
    const existantes = lireStorage()
    const nouvelle: Offre = {
      ...offre,
      id: crypto.randomUUID(),
      candidats: 0,
      dateCreation: new Date().toISOString(),
    }
    const miseAJour = [nouvelle, ...existantes]
    ecrireStorage(miseAJour)
    setOffres(miseAJour)
    return nouvelle
  }, [])

  const supprimerOffre = useCallback((id: string) => {
    const existantes = lireStorage()
    sauvegarder(existantes.filter((o) => o.id !== id))
  }, [sauvegarder])

  const changerStatut = useCallback((id: string, statut: Offre["statut"]) => {
    const existantes = lireStorage()
    sauvegarder(existantes.map((o) => o.id === id ? { ...o, statut } : o))
  }, [sauvegarder])

  return { offres, charge, ajouterOffre, supprimerOffre, changerStatut }
}