#global low1,upp1,low2,upp2,low3,upp3
import numpy as np
import cv2
import WYChsv
from  motorm import turn
from time import sleep
from bottclr import bottclr
from RED_BOTH import RED_BOTH
from targs import targs
from targx import targx
from WYC2 import Target2
from WYC2 import hsec
from WYC2 import road
from WYC2 import motcam
from WYC2 import Rturn
from WYC2 import Lturn
from WYC2 import RSturn
from WYC2 import LSturn

#********************** MAIN ************************
RGX=0.06; RN=100; Kshow=1
Lx=640; Ly=480; F=2; Lx2=int(Lx/F); Ly2=int(Ly/F); XLT=Lx2-100; XRT=Lx2+100
WD=0; F8=8; Lx8=int((Lx-2*WD)/F8); Ly8=int(Ly/F8); MIDX=int(Lx8/2)
WM=30; X1=MIDX-WM; X2=MIDX+WM+1; MIX=int((X1+X2)/2)
BADISx=int(Ly8*0.8); RGX=0.06; RN=100; Kshow=1;
NTR=50; NBAR=0; TARG=0; win='imgcam'; WALL=int(Lx8/2)
yiscan=[Ly8-7-3*i for i in range(10)]; XLEFT=int(Lx8/8*3.5); XRIGHT=int(Lx8/8*4.5)
low1=np.array([ 50,100, 40]);upp1=np.array([ 70,150,100]) #G
low2=np.array([170,150, 50]);upp2=np.array([180,255,255]) # R
low3=np.array([  0,150, 50]);upp3=np.array([ 10,255,255]) # R
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,480)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out=cv2.VideoWriter('WYC.avi',fourcc,20.0,(Lx,Ly))
sleep(2)
ret,image=cap.read()
s1=cv2.resize(image,(320,240))
s2=cv2.resize(image,(320,240))
s3=cv2.resize(image,(320,240))
s4=cv2.resize(image,(320,240))
hs12=np.hstack((s1,s2))
hs34=np.hstack((s3,s4))
hs1234=np.vstack((hs12,hs34))
cv2.imshow('hs1234',hs1234); out.write(hs1234)

'''
def motcam(cap,win,Ns,lsp,rsp,dur):
    for j in range(Ns):
        ret,image=cap.read()
        s1=cv2.resize(image,(320,240))
        s2=np.copy(s1); s3=np.copy(s1); s4=np.copy(s1)
        hs12=np.hstack((s1,s2))
        hs1234=np.vstack((hs12,hs34))
        cv2.imshow('hs1234',hs1234); out.write(hs1234)
        if cv2.waitKey(1) & 0xFF == ord('q'): break
        turn(lsp,rsp,dur); turn(-0.00,-0.00,1.00)
'''

#imgt,tm12,TDR,tbox=Target2(image);
#motcam(cap,win,8,0.4,-0.4,0.1); motcam(cap,win,3,0.0,0.0,0.5)
#motcam(cap,win,6,0.0,0.8,0.1); motcam(cap,win,3,0.4,0.4,0.1)
Rturn(cap,win,out)






'''
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH,640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,480)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out=cv2.VideoWriter('carTB.mp4', fourcc, 20.0, (640,480))
sleep(2)
ret,img=cap.read()
imgt=np.copy(img)
'''

if(1==1):
    LXM=image.shape[1]; LYM=image.shape[0]; WALL=int(LXM*0.5)
    low1=np.array([50,100,40]);upp1=np.array([70,255,255]) #G
    low2=np.array([170,150,50]);upp2=np.array([180,255,255]) # R
    low3=np.array([0,150,50]);upp3=np.array([10,255,255]) # R
    low1=np.array([50,100,40]);upp1=np.array([70,255,255]) #G
    low_rd = np.array([0  ,  0,100]); upp_rd = np.array([255, 40,255])
    print('yiscan=',yiscan,'  BADISx=',BADISx)
    #--------------------
    H8=0; KTARG=0; Nmiss=0; DR=0; NRCH=0
    for k in range(43):
        if(NRCH>6): break
        ret,image=cap.read()
        imgt,tm12,TDR,tbox=Target2(image);
        KBARR,MBAR,BDR,xc,yc,yb,datax,clone1=road(image,tm12)
        #print(tbox,'datax=',datax)
        H8a=tbox[-1]; #print('tbox=',tbox,H8a)
        if(KTARG==1 and tbox[5]==0): Nmiss+=1; print('Nmiss=',Nmiss); continue
        if(tbox[5]==1): KTARG=tbox[5]; Nmiss=0
        if(H8a>H8): H8=H8a
        if(TDR==0): DR=BDR
        if(TDR>0 and KBARR==1):
            dx=abs(tbox[0]-datax[2][0]); dy=abs(tbox[1]-datax[2][1])
            #if(H8<10 and BDR>10): DR=BDR
            if(dx<8 and dy<8 and H8>9): DR=TDR; #print('T=B,dx,dy=',dx,dy)
            else:
                DR=BDR
                if(BDR>20 and (xc<15 or xc>65 or H8>7)): DR=TDR
        if(TDR>0 and KBARR==0): DR=TDR
        s1=cv2.resize(image,(320,240))
        s2=cv2.resize(image,(320,240))
        s3=cv2.resize(imgt,(320,240))
        s4=cv2.resize(clone1,(320,240))
        hs12=np.hstack((s1,s2))
        hs34=np.hstack((s3,s4))
        hs1234=np.vstack((hs12,hs34))
        cv2.imshow('hs1234',hs1234); out.write(hs1234)
        if(H8>20): print('k=',k,'REACH TARGET, H8=',H8); DR=0; NRCH+=1; sleep(2)
        else: print('k=',k,'DR=',DR,'TDR=',TDR,BDR,KBARR,MBAR,xc,yc,yb,'H8=',H8)
        if cv2.waitKey(1) & 0xFF == ord('q'): break
        if(k==0): cv2.waitKey(0); sleep(1)
        #if(DR>10): cv2.waitKey(0)
        if(DR==11):turn(0.3,0.3,0.10); turn(0,0,0.05);
        if(DR==1):turn(0.3,0.3,0.1); turn(0,0,0.05);
        if(DR==3): turn(0.0,0.4,0.10); turn(0,0,0.05);
        if(DR==7): turn(0.4,0.0,0.10); turn(0,0,0.05);
        if(DR==13): Lturn(cap,win,out)
        if(DR==17): Rturn(cap,win,out)
        if(DR==23): LSturn(cap,win,out)
        if(DR==27): RSturn(cap,win,out)
        if(DR==0): turn(0.0,0.0,0.10); turn(0,0,0.05);
    #cv2.waitKey(0)
    cv2.destroyAllWindows();
    cap.release()
    out.release()















if(1==2):
    H8=0
    for j in range(10):
        ret,image=cap.read()
        #............................................
        imgt,TDR,tbox=Target2(image); 
        (x,y,w,h)=tbox[0:4]
        XT8=int(x/8); DT8=int(w/8); YT8=int(y/8); H8a=int(h/8); YTG=YT8+H8
        if(H8a>H8): H8=H8a
        print('###j_=',j,TDR,tbox,(x,y,w,h),XT8,DT8,H8)
        #............................................
        res2,Bdat=barrier(image); 
        lenB=len(Bdat)
        print('j_NTR=',j,lenB,' Bdat=',Bdat)
        s1=cv2.resize(image,(320,240))
        s2=cv2.resize(imgt,(320,240))
        s3=cv2.resize(res2,(320,240))
        hs123=np.hstack((s1,s2,s3))
        cv2.imshow('hs123',hs123)
        #out.write(hs123)
        cv2.waitKey(0)

    cv2.waitKey(0)
    cv2.destroyAllWindows();        
    cap.release()
    out.release()








        #dr,lred,midl,sh,img1=RED_BOTH(img)
        #botclr(img)
        #print('dr,lred,sh=',dr,lred,sh)
        #cv2.imshow('img1',img1)
        #boxes,h2=targs(MSK,low1,upp1,low2,upp2,img)
        #boxes,h2=targx(MSK,low1,upp1,low2,upp2,img)
        #print(j,len(boxes),boxes)
        #cv2.imshow('h2',h2)
        #cv2.imwrite('targ_red_'+str(j)+'.png',h2)

