-- 086: State motor carrier fulfillment status machine.
--
-- State trucking filings (IRP, IFTA, NY HUT, CT HUF, weight-distance, CA MCP,
-- etc.) have a multi-step fulfillment lifecycle that goes beyond payment: we
-- must collect the customer's signed authorization, possibly get them to add us
-- as a delegate inside the state portal (or collect credentials), get approval
-- for variable government fees, and then file and wait on the state.
--
-- This adds a dedicated fulfillment_status column to compliance_orders so ops
-- and the customer portal can see exactly where a state filing is, independent
-- of payment_status. Non-state services simply leave it NULL.
--
-- Status lifecycle (see docs/trucking-state-authorization-plan.md):
--   authorization_required          -> we emailed the customer the signing link
--   authorization_signed            -> customer signed the Limited Authorization
--   awaiting_customer_delegation    -> customer must add us as portal user/delegate
--   awaiting_secure_credentials     -> delegation unsupported; collecting credentials
--   awaiting_government_fee_approval -> variable state fee quoted, awaiting OK to pay
--   awaiting_insurance_filing       -> waiting on insurer to file proof (e.g. intrastate)
--   ready_to_file                   -> all blockers cleared; queued for filing
--   filed_waiting_state             -> submitted; waiting on the state to issue
--   completed                       -> credentials/decals/account delivered

ALTER TABLE compliance_orders
    ADD COLUMN IF NOT EXISTS fulfillment_status TEXT
        CHECK (fulfillment_status IS NULL OR fulfillment_status IN (
            'authorization_required',
            'authorization_signed',
            'awaiting_customer_delegation',
            'awaiting_secure_credentials',
            'awaiting_government_fee_approval',
            'awaiting_insurance_filing',
            'ready_to_file',
            'filed_waiting_state',
            'completed'
        )),
    ADD COLUMN IF NOT EXISTS fulfillment_status_at TIMESTAMPTZ;

CREATE INDEX IF NOT EXISTS idx_compliance_orders_fulfillment
    ON compliance_orders(fulfillment_status)
    WHERE fulfillment_status IS NOT NULL;

COMMENT ON COLUMN compliance_orders.fulfillment_status IS
    'State motor carrier filing lifecycle (NULL for services without a portal/authorization step). See migration 086.';
COMMENT ON COLUMN compliance_orders.fulfillment_status_at IS
    'When fulfillment_status last changed.';
