import {eq} from "drizzle-orm";
import {randomUUID} from "node:crypto";
import {getDb} from "../../../db";
import {drivers,users} from "../../../db/schema";
import {getFleetUser,hashPassword} from "../../../lib/fleet-auth";
const deny=()=>Response.json({error:"فقط مدیر کل به مدیریت کاربران دسترسی دارد."},{status:403});
export async function GET(r:Request){const s=await getFleetUser(r);if(!s||s.profile.role!=="general_manager")return deny();return Response.json(await getDb().select({id:users.id,username:users.username,full_name:users.fullName,role:users.role,driver_id:users.driverId,is_active:users.isActive,must_change_password:users.mustChangePassword,created_at:users.createdAt}).from(users))}
export async function POST(r:Request){const s=await getFleetUser(r);if(!s||s.profile.role!=="general_manager")return deny();const b:any=await r.json(),db=getDb();if(b.action==="toggle"){await db.update(users).set({isActive:Boolean(b.isActive)}).where(eq(users.id,String(b.id)));return Response.json({ok:true})}if(b.action!=="create")return Response.json({error:"عملیات نامعتبر"},{status:400});const username=String(b.username||"").trim().toLowerCase(),password=String(b.password||"");if(!/^[a-z0-9._-]{3,32}$/.test(username)||password.length<8||!b.fullName||!["supervisor","driver"].includes(b.role))return Response.json({error:"نام، نام کاربری انگلیسی و رمز حداقل ۸ کاراکتری الزامی است."},{status:400});let driverId=b.role==="driver"&&b.driverId?Number(b.driverId):null;if(b.role==="driver"&&!driverId){const [d]=await db.insert(drivers).values({fullName:b.fullName,nationalId:`AUTO-${randomUUID()}`,phone:"تکمیل نشده",licenseNo:"تکمیل نشده",notes:"پرونده اولیه هنگام ساخت حساب ایجاد شده؛ اطلاعات هویتی را تکمیل کنید."}).returning();driverId=d.id}try{const [u]=await db.insert(users).values({id:randomUUID(),username,passwordHash:await hashPassword(password),fullName:b.fullName,role:b.role,driverId}).returning();return Response.json({id:u.id},{status:201})}catch{return Response.json({error:"این نام کاربری قبلاً ثبت شده است."},{status:409})}}
