"use strict";(()=>{var e={};e.id=6668,e.ids=[6668],e.modules={72934:e=>{e.exports=require("next/dist/client/components/action-async-storage.external.js")},54580:e=>{e.exports=require("next/dist/client/components/request-async-storage.external.js")},45869:e=>{e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},27790:e=>{e.exports=require("assert")},78893:e=>{e.exports=require("buffer")},84770:e=>{e.exports=require("crypto")},17702:e=>{e.exports=require("events")},32615:e=>{e.exports=require("http")},35240:e=>{e.exports=require("https")},86624:e=>{e.exports=require("querystring")},17360:e=>{e.exports=require("url")},21764:e=>{e.exports=require("util")},71568:e=>{e.exports=require("zlib")},64888:(e,i,t)=>{t.r(i),t.d(i,{originalPathname:()=>f,patchFetch:()=>v,requestAsyncStorage:()=>I,routeModule:()=>z,serverHooks:()=>b,staticGenerationAsyncStorage:()=>T});var n={};t.r(n),t.d(n,{GET:()=>g,POST:()=>c,PUT:()=>p,dynamic:()=>u});var s=t(73278),o=t(45002),r=t(54877),a=t(71309),l=t(33897),d=t(74725),m=t(69362);let u="force-dynamic";async function g(e){try{let e={id:"settings-1",studioName:"United Tattoo Studio",description:"Premier tattoo studio specializing in custom artwork and professional tattooing services.",address:"123 Main Street, Denver, CO 80202",phone:"+1 (555) 123-4567",email:"info@unitedtattoo.com",socialMedia:{instagram:"https://instagram.com/unitedtattoo",facebook:"https://facebook.com/unitedtattoo",twitter:"https://twitter.com/unitedtattoo",tiktok:"https://tiktok.com/@unitedtattoo"},businessHours:[{dayOfWeek:1,openTime:"10:00",closeTime:"20:00",isClosed:!1},{dayOfWeek:2,openTime:"10:00",closeTime:"20:00",isClosed:!1},{dayOfWeek:3,openTime:"10:00",closeTime:"20:00",isClosed:!1},{dayOfWeek:4,openTime:"10:00",closeTime:"20:00",isClosed:!1},{dayOfWeek:5,openTime:"10:00",closeTime:"22:00",isClosed:!1},{dayOfWeek:6,openTime:"10:00",closeTime:"22:00",isClosed:!1},{dayOfWeek:0,openTime:"12:00",closeTime:"18:00",isClosed:!1}],heroImage:"/united-studio-main.jpg",logoUrl:"/united-logo-website.jpg",emailNotifications:!0,smsNotifications:!1,bookingEnabled:!0,onlinePayments:!0,requireDeposit:!0,depositAmount:100,cancellationPolicy:"Cancellations must be made at least 24 hours in advance. Deposits are non-refundable.",theme:"system",language:"en",timezone:"America/Denver",updatedAt:new Date};return a.NextResponse.json(e)}catch(e){return console.error("Error fetching site settings:",e),a.NextResponse.json({error:"Failed to fetch site settings"},{status:500})}}async function p(e){try{await (0,l.mk)(d.i.SHOP_ADMIN);let i=await e.json(),t=m.IF.parse(i),n={id:"settings-1",studioName:t.studioName||"United Tattoo Studio",description:t.description||"Premier tattoo studio specializing in custom artwork and professional tattooing services.",address:t.address||"123 Main Street, Denver, CO 80202",phone:t.phone||"+1 (555) 123-4567",email:t.email||"info@unitedtattoo.com",socialMedia:t.socialMedia||{instagram:"https://instagram.com/unitedtattoo",facebook:"https://facebook.com/unitedtattoo",twitter:"https://twitter.com/unitedtattoo",tiktok:"https://tiktok.com/@unitedtattoo"},businessHours:t.businessHours||[{dayOfWeek:1,openTime:"10:00",closeTime:"20:00",isClosed:!1},{dayOfWeek:2,openTime:"10:00",closeTime:"20:00",isClosed:!1},{dayOfWeek:3,openTime:"10:00",closeTime:"20:00",isClosed:!1},{dayOfWeek:4,openTime:"10:00",closeTime:"20:00",isClosed:!1},{dayOfWeek:5,openTime:"10:00",closeTime:"22:00",isClosed:!1},{dayOfWeek:6,openTime:"10:00",closeTime:"22:00",isClosed:!1},{dayOfWeek:0,openTime:"12:00",closeTime:"18:00",isClosed:!1}],heroImage:t.heroImage||"/united-studio-main.jpg",logoUrl:t.logoUrl||"/united-logo-website.jpg",updatedAt:new Date};return a.NextResponse.json(n)}catch(e){if(console.error("Error updating site settings:",e),e instanceof Error){if(e.message.includes("Authentication required"))return a.NextResponse.json({error:"Authentication required"},{status:401});if(e.message.includes("Insufficient permissions"))return a.NextResponse.json({error:"Insufficient permissions"},{status:403})}return a.NextResponse.json({error:"Failed to update site settings"},{status:500})}}async function c(e){try{await (0,l.mk)(d.i.SUPER_ADMIN);let i=await e.json(),t=m.IF.parse(i),n={id:`settings-${Date.now()}`,studioName:t.studioName||"United Tattoo Studio",description:t.description||"Premier tattoo studio specializing in custom artwork and professional tattooing services.",address:t.address||"123 Main Street, Denver, CO 80202",phone:t.phone||"+1 (555) 123-4567",email:t.email||"info@unitedtattoo.com",socialMedia:t.socialMedia||{},businessHours:t.businessHours||[],heroImage:t.heroImage,logoUrl:t.logoUrl,updatedAt:new Date};return a.NextResponse.json(n,{status:201})}catch(e){if(console.error("Error creating site settings:",e),e instanceof Error){if(e.message.includes("Authentication required"))return a.NextResponse.json({error:"Authentication required"},{status:401});if(e.message.includes("Insufficient permissions"))return a.NextResponse.json({error:"Insufficient permissions"},{status:403})}return a.NextResponse.json({error:"Failed to create site settings"},{status:500})}}let z=new s.AppRouteRouteModule({definition:{kind:o.x.APP_ROUTE,page:"/api/settings/route",pathname:"/api/settings",filename:"route",bundlePath:"app/api/settings/route"},resolvedPagePath:"/home/Nicholai/Documents/Dev/united_v03/united-tattoo/united-tattoo/app/api/settings/route.ts",nextConfigOutput:"standalone",userland:n}),{requestAsyncStorage:I,staticGenerationAsyncStorage:T,serverHooks:b}=z,f="/api/settings/route";function v(){return(0,r.patchFetch)({serverHooks:b,staticGenerationAsyncStorage:T})}},33897:(e,i,t)=>{t.d(i,{Lz:()=>m,mk:()=>g});var n=t(22571),s=t(43016),o=t(76214),r=t(29628);let a=r.z.object({DATABASE_URL:r.z.string().url(),DIRECT_URL:r.z.string().url().optional(),NEXTAUTH_URL:r.z.string().url(),NEXTAUTH_SECRET:r.z.string().min(1),GOOGLE_CLIENT_ID:r.z.string().optional(),GOOGLE_CLIENT_SECRET:r.z.string().optional(),GITHUB_CLIENT_ID:r.z.string().optional(),GITHUB_CLIENT_SECRET:r.z.string().optional(),AWS_ACCESS_KEY_ID:r.z.string().min(1),AWS_SECRET_ACCESS_KEY:r.z.string().min(1),AWS_REGION:r.z.string().min(1),AWS_BUCKET_NAME:r.z.string().min(1),AWS_ENDPOINT_URL:r.z.string().url().optional(),NODE_ENV:r.z.enum(["development","production","test"]).default("development"),SMTP_HOST:r.z.string().optional(),SMTP_PORT:r.z.string().optional(),SMTP_USER:r.z.string().optional(),SMTP_PASSWORD:r.z.string().optional(),VERCEL_ANALYTICS_ID:r.z.string().optional()}),l=function(){try{return a.parse(process.env)}catch(e){if(e instanceof r.z.ZodError){let i=e.errors.map(e=>e.path.join(".")).join(", ");throw Error(`Missing or invalid environment variables: ${i}`)}throw e}}();var d=t(74725);let m={providers:[(0,o.Z)({name:"credentials",credentials:{email:{label:"Email",type:"email"},password:{label:"Password",type:"password"}},async authorize(e){if(console.log("Authorize called with:",e),!e?.email||!e?.password)return console.log("Missing email or password"),null;if(console.log("Email received:",e.email),console.log("Password received:",e.password?"***":"empty"),"nicholai@biohazardvfx.com"===e.email)return console.log("Admin user recognized!"),{id:"admin-nicholai",email:"nicholai@biohazardvfx.com",name:"Nicholai",role:d.i.SUPER_ADMIN};console.log("Using fallback user creation");let i={id:"dev-user-"+Date.now(),email:e.email,name:e.email.split("@")[0],role:d.i.SUPER_ADMIN};return console.log("Created user:",i),i}}),...l.GOOGLE_CLIENT_ID&&l.GOOGLE_CLIENT_SECRET?[(0,n.Z)({clientId:l.GOOGLE_CLIENT_ID,clientSecret:l.GOOGLE_CLIENT_SECRET})]:[],...l.GITHUB_CLIENT_ID&&l.GITHUB_CLIENT_SECRET?[(0,s.Z)({clientId:l.GITHUB_CLIENT_ID,clientSecret:l.GITHUB_CLIENT_SECRET})]:[]],session:{strategy:"jwt",maxAge:2592e3},callbacks:{jwt:async({token:e,user:i,account:t})=>(i&&(e.role=i.role||d.i.CLIENT,e.userId=i.id),e),session:async({session:e,token:i})=>(i&&(e.user.id=i.userId,e.user.role=i.role),e),signIn:async({user:e,account:i,profile:t})=>!0,redirect:async({url:e,baseUrl:i})=>e.startsWith("/")?`${i}${e}`:new URL(e).origin===i?e:`${i}/admin`},pages:{signIn:"/auth/signin",error:"/auth/error"},events:{async signIn({user:e,account:i,profile:t,isNewUser:n}){console.log(`User ${e.email} signed in`)},async signOut({session:e,token:i}){console.log("User signed out")}},debug:"development"===l.NODE_ENV};async function u(){let{getServerSession:e}=await t.e(4128).then(t.bind(t,4128));return e(m)}async function g(e){let i=await u();if(!i)throw Error("Authentication required");if(e&&!function(e,i){let t={[d.i.CLIENT]:0,[d.i.ARTIST]:1,[d.i.SHOP_ADMIN]:2,[d.i.SUPER_ADMIN]:3};return t[e]>=t[i]}(i.user.role,e))throw Error("Insufficient permissions");return i}},69362:(e,i,t)=>{t.d(i,{IF:()=>d,Jt:()=>o,NK:()=>u,dC:()=>m,xD:()=>r});var n=t(29628),s=t(74725);n.z.object({id:n.z.string().uuid(),email:n.z.string().email(),name:n.z.string().min(1,"Name is required"),role:n.z.nativeEnum(s.i),avatar:n.z.string().url().optional()}),n.z.object({email:n.z.string().email("Invalid email address"),name:n.z.string().min(1,"Name is required").max(100,"Name too long"),password:n.z.string().min(8,"Password must be at least 8 characters"),role:n.z.nativeEnum(s.i).default(s.i.CLIENT)}).partial().extend({id:n.z.string().uuid()}),n.z.object({id:n.z.string().uuid(),userId:n.z.string().uuid(),name:n.z.string().min(1,"Artist name is required"),bio:n.z.string().min(10,"Bio must be at least 10 characters"),specialties:n.z.array(n.z.string()).min(1,"At least one specialty is required"),instagramHandle:n.z.string().optional(),isActive:n.z.boolean().default(!0),hourlyRate:n.z.number().positive().optional()});let o=n.z.object({name:n.z.string().min(1,"Artist name is required").max(100,"Name too long"),bio:n.z.string().min(10,"Bio must be at least 10 characters").max(1e3,"Bio too long"),specialties:n.z.array(n.z.string().min(1)).min(1,"At least one specialty is required").max(10,"Too many specialties"),instagramHandle:n.z.string().regex(/^[a-zA-Z0-9._]+$/,"Invalid Instagram handle").optional(),hourlyRate:n.z.number().positive("Hourly rate must be positive").max(1e3,"Hourly rate too high").optional(),isActive:n.z.boolean().default(!0)}),r=o.partial().extend({id:n.z.string().uuid()});n.z.object({id:n.z.string().uuid(),artistId:n.z.string().uuid(),url:n.z.string().url("Invalid image URL"),caption:n.z.string().max(500,"Caption too long").optional(),tags:n.z.array(n.z.string()).max(20,"Too many tags"),order:n.z.number().int().min(0),isPublic:n.z.boolean().default(!0)}),n.z.object({artistId:n.z.string().uuid(),url:n.z.string().url("Invalid image URL"),caption:n.z.string().max(500,"Caption too long").optional(),tags:n.z.array(n.z.string().min(1)).max(20,"Too many tags").default([]),order:n.z.number().int().min(0).default(0),isPublic:n.z.boolean().default(!0)}).partial().extend({id:n.z.string().uuid()}),n.z.object({id:n.z.string().uuid(),artistId:n.z.string().uuid(),clientId:n.z.string().uuid(),title:n.z.string().min(1,"Title is required"),description:n.z.string().optional(),startTime:n.z.date(),endTime:n.z.date(),status:n.z.nativeEnum(s.Z),depositAmount:n.z.number().positive().optional(),totalAmount:n.z.number().positive().optional(),notes:n.z.string().optional()}),n.z.object({artistId:n.z.string().uuid("Invalid artist ID"),clientId:n.z.string().uuid("Invalid client ID"),title:n.z.string().min(1,"Title is required").max(200,"Title too long"),description:n.z.string().max(1e3,"Description too long").optional(),startTime:n.z.string().datetime("Invalid start time"),endTime:n.z.string().datetime("Invalid end time"),depositAmount:n.z.number().positive("Deposit must be positive").optional(),totalAmount:n.z.number().positive("Total amount must be positive").optional(),notes:n.z.string().max(1e3,"Notes too long").optional()}).refine(e=>new Date(e.endTime)>new Date(e.startTime),{message:"End time must be after start time",path:["endTime"]}),n.z.object({id:n.z.string().uuid(),artistId:n.z.string().uuid("Invalid artist ID").optional(),clientId:n.z.string().uuid("Invalid client ID").optional(),title:n.z.string().min(1,"Title is required").max(200,"Title too long").optional(),description:n.z.string().max(1e3,"Description too long").optional(),startTime:n.z.string().datetime("Invalid start time").optional(),endTime:n.z.string().datetime("Invalid end time").optional(),status:n.z.nativeEnum(s.Z).optional(),depositAmount:n.z.number().positive("Deposit must be positive").optional(),totalAmount:n.z.number().positive("Total amount must be positive").optional(),notes:n.z.string().max(1e3,"Notes too long").optional()}).refine(e=>!e.startTime||!e.endTime||new Date(e.endTime)>new Date(e.startTime),{message:"End time must be after start time",path:["endTime"]});let a=n.z.object({instagram:n.z.string().url("Invalid Instagram URL").optional(),facebook:n.z.string().url("Invalid Facebook URL").optional(),twitter:n.z.string().url("Invalid Twitter URL").optional(),tiktok:n.z.string().url("Invalid TikTok URL").optional()}),l=n.z.object({dayOfWeek:n.z.number().int().min(0).max(6),openTime:n.z.string().regex(/^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$/,"Invalid time format (HH:mm)"),closeTime:n.z.string().regex(/^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$/,"Invalid time format (HH:mm)"),isClosed:n.z.boolean().default(!1)});n.z.object({id:n.z.string().uuid(),studioName:n.z.string().min(1,"Studio name is required"),description:n.z.string().min(10,"Description must be at least 10 characters"),address:n.z.string().min(5,"Address is required"),phone:n.z.string().regex(/^[\+]?[1-9][\d]{0,15}$/,"Invalid phone number"),email:n.z.string().email("Invalid email address"),socialMedia:a,businessHours:n.z.array(l),heroImage:n.z.string().url("Invalid hero image URL").optional(),logoUrl:n.z.string().url("Invalid logo URL").optional()});let d=n.z.object({studioName:n.z.string().min(1,"Studio name is required").max(100,"Studio name too long").optional(),description:n.z.string().min(10,"Description must be at least 10 characters").max(1e3,"Description too long").optional(),address:n.z.string().min(5,"Address is required").max(200,"Address too long").optional(),phone:n.z.string().regex(/^[\+]?[1-9][\d]{0,15}$/,"Invalid phone number").optional(),email:n.z.string().email("Invalid email address").optional(),socialMedia:a.optional(),businessHours:n.z.array(l).optional(),heroImage:n.z.string().url("Invalid hero image URL").optional(),logoUrl:n.z.string().url("Invalid logo URL").optional()});n.z.object({id:n.z.string().uuid(),filename:n.z.string().min(1,"Filename is required"),originalName:n.z.string().min(1,"Original name is required"),mimeType:n.z.string().regex(/^[a-zA-Z0-9][a-zA-Z0-9!#$&\-\^_]*\/[a-zA-Z0-9][a-zA-Z0-9!#$&\-\^_.]*$/,"Invalid MIME type"),size:n.z.number().positive("File size must be positive"),url:n.z.string().url("Invalid file URL"),uploadedBy:n.z.string().uuid("Invalid user ID")}),n.z.object({filename:n.z.string().min(1,"Filename is required"),originalName:n.z.string().min(1,"Original name is required"),mimeType:n.z.string().regex(/^image\/(jpeg|jpg|png|gif|webp)$/,"Only image files are allowed"),size:n.z.number().positive("File size must be positive").max(10485760,"File too large (max 10MB)"),uploadedBy:n.z.string().uuid("Invalid user ID")});let m=n.z.object({page:n.z.string().nullable().transform(e=>e||"1").pipe(n.z.string().regex(/^\d+$/).transform(Number).pipe(n.z.number().int().min(1))),limit:n.z.string().nullable().transform(e=>e||"10").pipe(n.z.string().regex(/^\d+$/).transform(Number).pipe(n.z.number().int().min(1).max(100)))}),u=n.z.object({isActive:n.z.string().nullable().transform(e=>"true"===e||"false"!==e&&void 0).optional(),specialty:n.z.string().nullable().optional(),search:n.z.string().nullable().optional()});n.z.object({artistId:n.z.string().nullable().refine(e=>!e||n.z.string().uuid().safeParse(e).success,"Invalid artist ID").optional(),clientId:n.z.string().nullable().refine(e=>!e||n.z.string().uuid().safeParse(e).success,"Invalid client ID").optional(),status:n.z.string().nullable().refine(e=>!e||Object.values(s.Z).includes(e),"Invalid status").optional(),startDate:n.z.string().nullable().refine(e=>!e||n.z.string().datetime().safeParse(e).success,"Invalid start date").optional(),endDate:n.z.string().nullable().refine(e=>!e||n.z.string().datetime().safeParse(e).success,"Invalid end date").optional()}),n.z.object({email:n.z.string().email("Invalid email address"),password:n.z.string().min(1,"Password is required")}),n.z.object({name:n.z.string().min(1,"Name is required").max(100,"Name too long"),email:n.z.string().email("Invalid email address"),password:n.z.string().min(8,"Password must be at least 8 characters"),confirmPassword:n.z.string().min(1,"Please confirm your password")}).refine(e=>e.password===e.confirmPassword,{message:"Passwords don't match",path:["confirmPassword"]}),n.z.object({name:n.z.string().min(1,"Name is required").max(100,"Name too long"),email:n.z.string().email("Invalid email address"),phone:n.z.string().regex(/^[\+]?[1-9][\d]{0,15}$/,"Invalid phone number").optional(),subject:n.z.string().min(1,"Subject is required").max(200,"Subject too long"),message:n.z.string().min(10,"Message must be at least 10 characters").max(1e3,"Message too long")}),n.z.object({artistId:n.z.string().uuid("Please select an artist"),name:n.z.string().min(1,"Name is required").max(100,"Name too long"),email:n.z.string().email("Invalid email address"),phone:n.z.string().regex(/^[\+]?[1-9][\d]{0,15}$/,"Invalid phone number"),preferredDate:n.z.string().min(1,"Please select a preferred date"),tattooDescription:n.z.string().min(10,"Please provide more details about your tattoo").max(1e3,"Description too long"),size:n.z.enum(["small","medium","large","sleeve"],{required_error:"Please select a size"}),placement:n.z.string().min(1,"Please specify placement").max(100,"Placement description too long"),budget:n.z.string().optional(),hasAllergies:n.z.boolean().default(!1),allergies:n.z.string().max(500,"Allergies description too long").optional(),additionalNotes:n.z.string().max(500,"Additional notes too long").optional()})},74725:(e,i,t)=>{var n,s;t.d(i,{Z:()=>s,i:()=>n}),function(e){e.SUPER_ADMIN="SUPER_ADMIN",e.SHOP_ADMIN="SHOP_ADMIN",e.ARTIST="ARTIST",e.CLIENT="CLIENT"}(n||(n={})),function(e){e.PENDING="PENDING",e.CONFIRMED="CONFIRMED",e.IN_PROGRESS="IN_PROGRESS",e.COMPLETED="COMPLETED",e.CANCELLED="CANCELLED"}(s||(s={}))}};var i=require("../../../webpack-runtime.js");i.C(e);var t=e=>i(i.s=e),n=i.X(0,[9379,8213,4833],()=>t(64888));module.exports=n})();