import type { SessionData } from '@/types/Auth'
import { getIronSession, SessionOptions } from 'iron-session'
import { cookies } from 'next/headers'
import { redirect } from 'next/navigation'

export const sessionOptions: SessionOptions = {
  cookieName: 'onsitesurvey_session',
  password: process.env.SESSION_PASSWORD as string,
  cookieOptions: {
    secure: process.env.NODE_ENV === 'production', // HTTPS에서만 쿠키 전송 (production일 때만 true)
    httpOnly: true, // 클라이언트 JavaScript에서 쿠키 접근 차단
    sameSite: 'lax', // 사용자가 외부 사이트의 링크를 클릭해 사이트에 들어올 때 쿠키가 전송됨
    // maxAge: 2147483647, // 최대 유효기간(약 68년)
    maxAge: 60 * 60 * 24 * 30, // 30일
    path: '/', // 쿠키가 유효한 경로 (기본값: 사이트 전체에 대해 유효)
  },
}

export const defaultSession: SessionData = {
  langCd: null,
  currPage: 0,
  rowCount: 0,
  startRow: 0,
  endRow: 0,
  compCd: null,
  agencyStoreId: null,
  storeId: null,
  storeNm: null,
  userId: null,
  category: null,
  userNm: null,
  userNmKana: null,
  telNo: null,
  fax: null,
  email: null,
  lastEditUser: null,
  storeGubun: null,
  pwCurr: null,
  pwdInitYn: null,
  apprStatCd: null,
  loginFailCnt: null,
  loginFailMinYn: null,
  priceViewStatCd: null,
  groupId: null,
  storeLvl: null,
  custCd: null,
  builderNo: null,
  isLoggedIn: false,
  role: null,
}

export const getSession = async () => {
  const cookieStore = await cookies()
  const session = await getIronSession<SessionData>(cookieStore, sessionOptions)
  return session
}

export const logout = async () => {
  const cookieStore = await cookies()
  const session = await getIronSession<SessionData>(cookieStore, sessionOptions)

  session.destroy()
  return redirect('/login')
}
