import { defineSourceControlDriver } from '@t3tools/source-control-core/server/driver';
import { fakeSourceControlDriverInstance } from '@t3tools/source-control-testing/fakeSourceControlDriver';
import { providerAuth } from '@t3tools/source-control-core/server/discovery';
import * as Effect from 'effect/Effect';
import { definition } from '../shared/definition.ts';
const pr = (number) => ({number,title:number===101?'Improve search navigation':'Add search filters',url:`https://github.com/demo/navigation/pull/${number}`,author:{login:'demo',name:null,avatarUrl:null,url:'https://github.com/demo'},headBranch:`feature-${number}`,baseBranch:'main',state:'open',isDraft:false,mergeability:'mergeable',additions:4,deletions:1,createdAt:'2026-11-01T12:00:00.000Z',updatedAt:'2026-11-01T12:00:00.000Z',reviewRequestLogins:[],labels:[],stack:{number:101,position:number===101?1:2,size:2,base:'main'}});
const instance = fakeSourceControlDriverInstance('github', {
 discovery:{type:'api',kind:'github',label:'GitHub',installHint:'Synthetic fixture',probeAuth:Effect.succeed(providerAuth({status:'authenticated',account:'demo'}))},
 sourceControl:{getDefaultBranch:()=>Effect.succeed('main'),listChangeRequests:()=>Effect.succeed([])},
 pullRequests:{readsPublicHostWithoutCheckout:true,getViewer:()=>Effect.succeed('demo'),
 listChangeRequests:()=>Effect.succeed({items:[pr(101),pr(102)],truncated:false,continues:false}),
 getChangeRequestSummary:({number})=>Effect.succeed(pr(number)),
 getChangeRequest:({number})=>Effect.succeed({...pr(number),body:'Synthetic navigation fixture. Open the linked chat or another stack layer, then use Back.',changedFiles:1,mergedAt:null,closedAt:null,reviewers:[],checks:[],mergeCapabilities:{merge:true,squash:true,rebase:true},viewerPermissions:{actions:[],comment:true,resolve:true,verdicts:[],requestReviewers:false}}),
 getChangeRequestStack:()=>Effect.succeed({id:'demo-stack',number:101,url:'https://github.com/demo/navigation/pull/101',base:'main',layers:[pr(101),pr(102)]}),
 getChangeRequestActivity:()=>Effect.succeed({comments:[],commentCount:0,commentsTruncated:false,reviewThreads:[],commits:[]}),
 getDiff:()=>Effect.succeed({patch:'',truncated:false,nextCursor:null})}
});
export const driver = defineSourceControlDriver({kind:definition.kind,definition,make:Effect.succeed(instance)});
