import React, { Component } from 'react'
import PropTypes from 'prop-types'
import { connect } from 'react-redux'
import { RequestUtils, isValidHttpVersion, parseUrl } from '../../flow/utils.js'
import { formatTimeStamp } from '../../utils.js'
import ContentView from '../ContentView'
import ContentViewOptions from '../ContentView/ContentViewOptions'
import ValidateEditor from '../ValueEditor/ValidateEditor'
import ValueEditor from '../ValueEditor/ValueEditor'
import HideInStatic from '../common/HideInStatic'
import Headers from './Headers'
import { startEdit, updateEdit } from '../../ducks/ui/flow'
import * as FlowActions from '../../ducks/flows'
import ToggleEdit from './ToggleEdit'
function RequestLine({ flow, readonly, updateFlow }) {
    return (
        
            
                 updateFlow({ request: { method } })}
                />
                 
                 updateFlow({ request: {path: '', ...parseUrl(url)}})}
                    isValid={url => !!parseUrl(url).host}
                />
                 
                 updateFlow({ request: { http_version } })}
                    isValid={isValidHttpVersion}
                />
            
         
    )
}
function ResponseLine({ flow, readonly, updateFlow }) {
    return (
        
             updateFlow({ response: { http_version: nextVer } })}
                isValid={isValidHttpVersion}
            />
             
             updateFlow({ response: { code: parseInt(code) } })}
                isValid={code => /^\d+$/.test(code)}
            />
             
             updateFlow({ response: { msg } })}
            />
        
    )
}
const Message = connect(
    state => ({
        flow: state.ui.flow.modifiedFlow || state.flows.byId[state.flows.selected[0]],
        isEdit: !!state.ui.flow.modifiedFlow,
    }),
    {
        updateFlow: updateEdit,
        uploadContent: FlowActions.uploadContent
    }
)
export class Request extends Component {
    render() {
        const { flow, isEdit, updateFlow, uploadContent } = this.props
        let noContent =  !isEdit && (flow.request.contentLength == 0 || flow.request.contentLength == null)
        return (
            
                
                    
                    
                     updateFlow({ request: { headers } })}
                    />
                    
                     updateFlow({ request: {content}})}
                        message={flow.request}/>
                
                
                {!noContent &&
                    
                }
                
            
        )
    }
}
Request = Message(Request)
export class Response extends Component {
    render() {
        const { flow, isEdit, updateFlow, uploadContent } = this.props
        let noContent =  !isEdit && (flow.response.contentLength == 0 || flow.response.contentLength == null)
        return (
            
                
                    
                    
                     updateFlow({ response: { headers } })}
                    />
                    
                     updateFlow({ response: {content}})}
                        message={flow.response}
                    />
                
                
                {!noContent &&
                    
                }
                
            
        )
    }
}
Response = Message(Response)
ErrorView.propTypes = {
    flow: PropTypes.object.isRequired,
}
export function ErrorView({ flow }) {
    return (
        
            
                {flow.error.msg}
                
                    {formatTimeStamp(flow.error.timestamp)}