import { getServerOrgCode } from "@/lib/org";
import { organizationService } from "@/services/organization/organizationService";
import { chargePointService } from "@/services/chargepoint/chargePointService";
import { ChargePoint } from "@/types/chargepoint/chargepoint";
import { DEFAULT_PAGINATION } from "./const/chargepoint.const";
import ChargepointPageHeader from "./components/ChargepointPageHeader";
import ChargepointList from "./sections/ChargepointList";
import ChargepointFilter from "./sections/ChargepointFilter";
import { PaginationInfo } from "@/types/api/api_response";

interface StationModuleProps {
  searchParams: Record<string, string>;
}

export async function StationsModule({ searchParams }: StationModuleProps) {
  let chargePoints: ChargePoint[] = [];
  let pagination: PaginationInfo = DEFAULT_PAGINATION; 

  let organization: any = null;
  const params = searchParams;
  const query = params?.query || '';
  const status = params?.status || '';
  const connectorType = params?.connector_type || '';
  const minPower = params?.min_power ? Number(params.min_power) : undefined;
  const maxPower = params?.max_power ? Number(params.max_power) : undefined;
  const organization_code = await getServerOrgCode();

  const defaultFilters = {
    query,
    status,
    connector_type: connectorType || '',
    min_power: minPower ?? 0,
    max_power: maxPower ?? 350,
    organization_code: organization_code || ''
  };

  try {
    // Fetch organization data
    organization = await organizationService.fetchByCode(organization_code || "");

    // Fetch initial chargepoints using access token if available
    try {
      const getInitialChargePoints = async () => {
        'use server';
        const res = await chargePointService.getChargePoints(
          {
            paginate_limit: 9,
            query,
            status,
            connector_type: connectorType,
            min_power: minPower,
            max_power: maxPower,
            organization_code: organization_code || undefined,
          },
          { backend: 'v1' },
        );
        return res || {data: [], pagination: {}};
      };

      const res = await getInitialChargePoints();
      chargePoints = res.data;
      pagination = res.pagination;
    } catch (cpErr: any) {
      console.error("Server Error: Failed to fetch initial charge points:", cpErr);
    }
  } catch (err: any) {
    console.error("Server Error: Failed to resolve organization:", err);
  }

  return (
    <div className="space-y-6 flex flex-col gap-4">
      <ChargepointPageHeader />
      <ChargepointFilter defaultFilters={defaultFilters} />
      <ChargepointList initialChargepoints={chargePoints} initialPagination={pagination} defaultFilters={defaultFilters} />
    </div>
  );
};
